免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

使用 AWS CLI 为 API Gateway v2(HTTP API)创建 JWT 授权器(Authorizer)

使用 AWS CLI 为 API Gateway v2(HTTP API)创建 JWT 授权器(Authorizer) 使用 AWS CLI 为 API Gateway v2HTTP API创建 JWT 授权器Authorizer【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli导读本文基于当前 AWS CLI 仓库中 create-authorizer.rst 官方示例系统讲解如何通过aws apigatewayv2 create-authorizer命令为 API Gateway v2 的 HTTP API 配置基于 Amazon Cognito 身份池的JWT 授权器实现对 API 请求的令牌级访问控制。读完本文你将掌握 JWT 授权器的全部核心参数与取值规范、创建命令的完整写法与预期输出、授权器的查看、更新与删除闭环操作并从仓库内置的 API 模型service-2.json层面理解每个参数在服务端的真实语义与约束。背景为什么 HTTP API 需要 AuthorizerAPI Gateway v2apigatewayv2支持两种 API 形态HTTP API 与 WebSocket API。HTTP API 本身不校验调用者身份任何拿到端点 URL 的客户端都能访问已部署的路由。Authorizer授权器正是承担访问控制职责的组件它定义从入站请求的哪个位置提取凭据、由谁签发并校验这些凭据。apigatewayv2的授权器共有两种类型见 AuthorizerType 枚举类型说明适用 APIJWT基于 JSON Web TokenJWT校验令牌由 OIDC/JWT 兼容的第三方身份提供商如 Amazon Cognito签发仅 HTTP APIREQUEST调用 Lambda 函数基于请求参数Header、Query String、Stage 变量、Context做自定义鉴权HTTP API 与 WebSocket API本示例使用的是JWT类型API Gateway 在请求进入后端集成之前从Authorization请求头中提取 Bearer Token交给配置的 Issuer签发方做签名与声明校验校验通过才放行令牌缺失或无效则直接返回401 Unauthorized。核心命令创建 JWT 授权器官方示例create-authorizer.rst中创建一个使用 Amazon Cognito 作为身份提供商的 JWT 授权器命令如下aws apigatewayv2 create-authorizer \ --name my-jwt-authorizer \ --api-id a1b2c3d4 \ --authorizer-type JWT \ --identity-source $request.header.Authorization \ --jwt-configuration Audience123456abc,Issuerhttps://cognito-idp.us-west-2.amazonaws.com/us-west-2_abc123命令执行成功后返回的 JSON 输出为{ AuthorizerId: a1b2c3, AuthorizerType: JWT, IdentitySource: [ $request.header.Authorization ], JwtConfiguration: { Audience: [ 123456abc ], Issuer: https://cognito-idp.us-west-2.amazonaws.com/us-west-2_abc123 }, Name: my-jwt-authorizer }参数逐项解读含底层模型约束从仓库内置的 CreateAuthorizerRequest 结构定义 可以确认创建授权器的请求体中存在以下字段其中ApiId、AuthorizerType、IdentitySource、Name为必填项--name必填授权器名称长度 1128 字符StringWithLengthBetween1And128。示例中为my-jwt-authorizer。--api-id必填目标 API 的标识符位于 HTTP 请求 URI 路径/v2/apis/{apiId}/authorizers中。可通过aws apigatewayv2 create-api或aws apigatewayv2 get-apis获取例如示例中的a1b2c3d4。--authorizer-type必填授权器类型枚举值为REQUEST或JWT。JWT 仅支持 HTTP APIREST/WebSocket API 请使用REQUEST。--identity-source必填标识从何处提取 JWT。目前仅支持基于 Header 与 Query String的两种选择表达式selection expression。官方示例使用$request.header.Authorization即从名为Authorization的请求头提取令牌若令牌放在查询串中可写为$request.querystring.token等形式。从 IdentitySourceList 模型 可见这是一个字符串列表对 JWT 类型而言是单个条目。--jwt-configurationJWT 类型必填JWT 校验配置包含两个子字段见 JWTConfiguration 结构Audience令牌的预期接收方audience列表。合法的 JWT 中aud声明必须与列表中至少一项匹配依据 RFC 7519。示例中为123456abc即 Cognito 用户池的应用客户端 ID。Issuer签发 JWT 的身份提供方基础域名。Amazon Cognito 用户池的格式为https://cognito-idp.region.amazonaws.com/userPoolId例如示例中的https://cognito-idp.us-west-2.amazonaws.com/us-west-2_abc123。JWT 授权器还支持的其他可选参数虽然示例未使用但从同一请求模型中可以看到JWT 授权器场景下仍可配置以下字段理解它们有助于生产环境调优--authorizer-result-ttl-in-seconds授权结果的缓存 TTL取值范围 03600 秒IntegerWithLengthBetween0And3600。为 0 时禁用缓存大于 0 时 API Gateway 会缓存授权响应最长 1 小时。该参数主要面向 HTTP API 的 Lambda 授权器JWT 校验本身由 API Gateway 托管执行。--authorizer-credentials-arnAPI Gateway 调用授权器所需的 IAM 角色 ARN仅支持REQUEST类型。--authorizer-uri授权器 URI。对REQUEST类型必须是格式良好的 Lambda 函数 URI形如arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:account_id:function:lambda_function_name/invocations仅支持REQUEST类型。--authorizer-payload-format-version发送给 HTTP API Lambda 授权器的负载格式支持1.0与2.0仅适用于 Lambda 授权器。--enable-simple-responses是否允许 Lambda 授权器返回简单格式布尔值而非 IAM 策略仅支持 HTTP API 的 Lambda 授权器。--identity-validation-expression从模型文档看该参数当前未被使用无需设置。底层调用与错误处理从 CreateAuthorizer 操作定义 可以看到该命令底层对应服务端 HTTP 接口POST /v2/apis/{apiId}/authorizers成功时返回 HTTP 201。创建失败时可能抛出以下错误NotFoundException指定的 API 不存在。BadRequestException请求参数非法如 Issuer 格式错误、Audience 为空、缺少必填项。ConflictException同名或同配置的授权器已存在。TooManyRequestsException请求频率超出限制。AWS CLI 会将这些异常以错误码形式输出到 stderr可通过--debug参数进一步定位 HTTP 层问题。配套实操查看、更新与删除授权器授权器创建后并非一次性配置运维中常需要查询、变更或清理。仓库 awscli/examples/apigatewayv2 目录提供了完整的配套示例。查看 API 下的所有授权器使用 get-authorizers 示例 列出指定 API 的全部授权器aws apigatewayv2 get-authorizers \ --api-id a1b2c3d4输出会以Items数组形式返回每个授权器的完整配置AuthorizerId、AuthorizerType、IdentitySource、JwtConfiguration、Name。注意从 paginators-1.json 可知GetAuthorizers支持分页使用--max-items控制单页条数、--starting-token获取后续页结果统一放在Items字段中若配置了--page-size还可进一步限制每次服务端请求的返回量。修改授权器配置使用 update-authorizer 示例将 JWT 授权器的身份来源改为名为Authorization的请求头aws apigatewayv2 update-authorizer \ --api-id a1b2c3d4 \ --authorizer-id a1b2c3 \ --identity-source $request.header.Authorizationupdate-authorizer采用部分更新语义只需传入需要变更的字段--authorizer-id为必填未传入的字段保持原值。上例返回的 JSON 中JwtConfiguration与Name均保持创建时的值仅IdentitySource被更新直观体现了这一行为。当需要调整 Issuer、Audience 或切换授权策略时同样通过该命令完成。删除授权器使用 delete-authorizer 示例 移除授权器aws apigatewayv2 delete-authorizer \ --api-id a1b2c3d4 \ --authorizer-id a1b2c3该命令成功执行后不产生任何输出无返回内容可通过后续get-authorizers验证删除结果。前置条件先创建 API在创建授权器之前目标 API 必须已存在。仓库 create-api.rst 示例 展示了两种创建方式创建 HTTP API快速创建自动绑定 Lambda 集成与默认部署阶段aws apigatewayv2 create-api \ --name my-http-api \ --protocol-type HTTP \ --target arn:aws:lambda:us-west-2:123456789012:function:my-lambda-function创建 WebSocket APIaws apigatewayv2 create-api \ --name myWebSocketApi \ --protocol-type WEBSOCKET \ --route-selection-expression $request.body.action创建成功后可从输出的ApiId字段如a1b2c3d4取得--api-id参数值用于后续create-authorizer调用。需要说明的是JWT 授权器仅适用于 HTTP APIWebSocket API 请选用REQUEST类型的 Lambda 授权器。典型调用链与验证建议完整的 JWT 访问控制落地路径为create-api创建 HTTP API记录ApiId在 Amazon Cognito 中准备用户池记录userPoolId与应用客户端 ID 作为Issuer与Audience或使用其他兼容 OIDC 的签发方create-authorizer绑定 JWT 校验配置到 API在路由create-route或集成上关联该授权器客户端携带Authorization: Bearer token访问 API未携带或令牌无效时收到401 Unauthorized。验证时可使用aws apigatewayv2 get-authorizer --api-id a1b2c3d4 --authorizer-id a1b2c3单条查询仓库 get-authorizer.rst 有对应示例确认配置落库再结合真实的 Cognito 签发令牌对 API 端点发起带鉴权头的请求做端到端验证。小结aws apigatewayv2 create-authorizer是启用 HTTP API 令牌鉴权的关键入口。通过--authorizer-type JWT与--jwt-configurationAudienceIssuer的组合可以快速接入 Amazon Cognito 等 OIDC 身份提供商--identity-source决定了令牌的提取位置Header 或 Query String。配合仓库内置的 get-authorizers、update-authorizer、delete-authorizer 示例即可完成授权器生命周期的完整管理。若需要更细粒度的自定义鉴权逻辑如校验 IP、多条件组合、动态 IAM 策略可进一步研究REQUEST类型 Lambda 授权器的方案其全部参数与约束同样定义在 apigatewayv2 服务模型 中可直接查阅。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表