【问题标题】:AWS HTTP API Gateway jwt validationAWS HTTP API Gateway jwt 验证
【发布时间】:2021-11-20 14:16:24
【问题描述】:

我对 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 的事情,或者它是否完全是其他事情。任何反馈将不胜感激。

【问题讨论】:

    标签: amazon-web-services oauth-2.0 amazon-cognito openid-connect aws-http-api


    【解决方案1】:

    授权方应偶尔调用 Cognito,以从 JWKS 端点获取令牌签名公钥。

    然后,在 AWS 控制台中,您需要确保在 API Gateway / Authorizers 下启用了授权缓存,并且它指向 HTTP 授权标头作为缓存的键。这将确保使用相同访问令牌的后续调用不会导致 Cognito 查找。至少我希望OAuth2Authorizer 可以这样工作——否则它将无法使用。

    我的资源

    我有一些关于这方面的东西可以帮助你更好地理解机制:

    我的情况有点不同,因为我使用的是 REST 端点(而不是 HTTP)并且还实现了一个自定义授权方。希望您可以避免这种情况,因为它非常不愉快。值得理解的是,策略文档是使结果缓存起作用的机制。

    未来

    AWS 中的授权机制非常有限,例如它不适用于安全 cookie。因此,我希望更新我的代码以在每个 lambda 中执行 OAuth 工作,以及单独的缓存。

    【讨论】:

    • 感谢您的分析。听起来很扎实。但是,对于带有 JwtConfiguration 的OAuth2Authorizer,就像我上面的 SAM 模板一样,似乎没有缓存选项。我确实在控制台中看到了 lambda 授权者的选项,但是对于 jwt 配置,该选项不存在。所以看来我必须创建一个 lambda 授权器来获取缓存并减少对 jwks 端点的调用。
    猜你喜欢
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 2021-10-09
    • 2021-09-05
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多