使用 JWT 授权方控制对 HTTP API 的访问
您可以使用 JSON Web 令牌 (JWT) 作为 OpenID Connect (OIDC)
如果您为 API 的路由配置 JWT 授权方,API Gateway 将验证客户端通过 API 请求提交的 JWT。API Gateway 根据令牌中的令牌验证和(可选)作用域来允许或拒绝请求。如果为路由配置作用域,则令牌必须至少包含路由的作用域之一。
您可以为 API 的每个路由配置不同的授权方,也可以为多个路由使用同一个授权方。
没有标准的机制可以将 JWT 访问令牌与其他类型的 JWT(如 OpenID Connect ID 令牌)区分开来。除非您需要 ID 令牌进行 API 授权,否则我们建议您将路由配置为需要授权范围。您还可以将 JWT 授权方配置为需要相应的发布者或受众(身份提供商仅在发布 JWT 访问令牌时才使用他们)。
授权 API 请求
API Gateway 使用以下常规工作流程向配置为使用 JWT 授权方的路由授权请求。
-
检查
identitySource
是否有令牌。identitySource
只能包含令牌或前缀为Bearer
的令牌。 -
对令牌解码。
-
使用从发布者的
jwks_uri
中提取的公有密钥检查令牌的算法和签名。目前仅支持基于 RSA 的算法。 -
验证声明。API Gateway 评估以下令牌声明:
如果这些步骤中的任何一个步骤失败,API Gateway 都会拒绝 API 请求。
验证 JWT 后,API Gateway 将令牌中的声明传递给 API 路由的集成。后端资源(如 Lambda 函数)可以访问 JWT 声明。例如,如果 JWT 包含了身份声明 emailID
,则它在 $event.requestContext.authorizer.jwt.claims.emailID
中可供 Lambda 集成使用。有关 API Gateway 向 Lambda 集成发送的负载的更多信息,请参阅使用 HTTP API 的 Amazon Lambda 代理集成。
创建 JWT 授权方
在创建 JWT 授权方之前,必须向身份提供商注册客户端应用程序。您必须还创建了 HTTP API。有关创建 HTTP API 的示例,请参阅 创建 HTTP API。有关通过将 Amazon Cognito 用作身份提供商的 JWT 授权方创建 HTTP API 的示例 Amazon CloudFormation 模板,请参阅 http-with-jwt-auth.yaml
以下 Amazon CLI 命令将创建 JWT 授权方。对于 jwt-configuration
,为您的身份提供商指定 Audience
和 Issuer
。
aws apigatewayv2 create-authorizer \ --name
authorizer-name
\ --api-idapi-id
\ --authorizer-type JWT \ --identity-source '$request.header.Authorization
' \ --jwt-configuration Audience=audience
,Issuer=https://cognito-idp.us-east-2
.amazonaws.com/userPoolID
使用Amazon CLI 更新路由以使用 JWT 授权方
以下命令更新路由以使用 JWT 授权方。
aws apigatewayv2 update-route \ --api-id
api-id
\ --route-idroute-id
\ --authorization-type JWT \ --authorizer-idauthorizer-id
\ --authorization-scopesuser.email