我对 Http API 网关验证 jwt 签名的方式有疑问。我使用 eu-west-1 中托管的 cognito 用户池作为身份提供者/令牌颁发者。我在 eu-west-1 和 us-east-1 中部署了一个 Http API 网关。我使用 SAM 进行设置,api 部分如下所示:
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
一切正常,但是当我进行一些性能测试时,我发现向路由添加授权会大大增加延迟。eu-west-1 中托管的 api 的延迟从 75ms 增加到 100ms,但 us-east-1 中托管的 api 的延迟从 160ms 增加到 550ms(从荷兰运行的测试结果是超过 50 次调用的平均值每次测试)。这些结果似乎表明,为了验证 Authorization 标头中的 jwt 不记名令牌,api 网关为每个要求。我对 Oauth 的了解有限,但我认为 .well-known/openid-configuration 只需要定期检查,因此 api 网关可以验证令牌而无需进行额外的网络调用。我不知道从这里去哪里,因为我不知道这是否只是事情的运作方式,或者这是否是 Oauth 的事情,或者它是否完全是其他事情。任何反馈将不胜感激。