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