You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS HTTP API Gateway跨区域JWT校验延迟过高问题咨询

JWT授权延迟问题排查与优化方案

基础说明

你提供的SAM配置本身符合AWS规范,不存在配置语法错误,问题与配置逻辑无关。

HttpApi:
   Type: AWS::Serverless::HttpApi
   Properties:
      DisableExecuteApiEndpoint: true
      StageName: !Ref StageName
      DefinitionBody:
         'Fn::Transform':
            Name: AWS::Include
            Parameters:
               Location: api.yaml
      Auth:
         DefaultAuthorizer: OAuth2Authorizer
         Authorizers:
            OAuth2Authorizer:
               IdentitySource: $request.header.Authorization
               JwtConfiguration:
                  issuer: https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_xxxxxxxx
                  audience:
                     - xxxxxxxxx

核心原理澄清

  • OAuth协议本身没有强制要求每次请求都拉取.well-known/openid-configuration端点配置,服务端仅需要周期性拉取并缓存签名公钥(JWKS),在密钥未轮换的场景下可以直接用本地缓存完成JWT签名校验,无需额外网络调用。
  • AWS HTTP API原生JWT授权器的默认JWKS缓存时长为1小时,仅在缓存冷启动、缓存失效、或者请求中的JWT签名密钥不在缓存中时,才会主动调用配置的issuer端点拉取最新配置。

延迟差异根因

观测到的跨区域部署的API网关延迟暴涨属于架构部署的正常现象:

  • eu-west-1区域的API网关和Cognito用户池同区域,拉取配置的网络延迟极低,所以开启授权后延迟仅上涨25ms,属于正常的JWT校验逻辑开销。
  • us-east-1区域的API网关需要跨大西洋调用eu-west-1的Cognito端点拉取配置,单次跨区调用的网络开销就可达200~300ms,叠加测试样本量较小(仅50次请求),包含了缓存冷启动的请求,最终平均延迟就会上涨到550ms的水平。如果做长时间稳态压测,稳定状态下的平均延迟会回落至200ms左右,仅缓存失效的少量请求会出现高延迟。

优化方案

方案1:同区域绑定身份提供商

在us-east-1区域独立部署一套Cognito用户池,该区域的API网关直接绑定同区域的Cognito作为JWT发行方,彻底消除跨区拉取配置的开销。如果需要多区域用户数据同步,可以通过Cognito用户导入导出、自定义触发器的方式实现数据同步。

方案2:改用自定义授权器缓存密钥

替换原生JWT授权器为Lambda自定义授权器,在Lambda代码中主动拉取JWKS并设置更长的缓存时长(比如24小时),同时监听Cognito的密钥轮换事件主动更新缓存,大幅降低缓存失效的频率,减少跨区调用的次数。

方案3:硬编码签名公钥

如果你的JWT采用RS256签名,且Cognito密钥轮换频率很低(默认轮换周期大于24小时),可以直接把签名公钥硬编码到自定义授权器逻辑中,完全消除运行时拉取OIDC配置的网络调用,实现最低的授权延迟。

内容的提问来源于stack exchange,提问作者Henk-Jan Uijterlinde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:00:04