【问题标题】:AWS Cognito Lambda Authorizer - 401 Unauthorized errorAWS Cognito Lambda 授权方 - 401 未经授权的错误
【发布时间】:2019-12-12 14:51:30
【问题描述】:

我在 AWS Cognito 中创建了一个用于验证的 lambda 授权器。

用户向 AWS Cognito 发送登录请求,登录成功后获取 ID 令牌。

有不同的 API 集,我需要使用 Lambda 授权器。

对于这些 API 请求,用户将 ID 令牌作为授权标头传递,并将用户池 ID 作为路径参数传递。

在我的自定义 lambda 函数中,我验证了这个 ID 令牌(JWT 令牌)

调用 lambda 函数时,它通过调用 URL 获取此用户池的 AWS Cognito 公钥

https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json

我解析这个 JSON 并将来自这个公钥的孩子与来自用户传递的 ID 令牌的孩子在授权标头中进行比较。

下一步,我检查令牌是否过期。

如果两项检查都通过,我允许用户调用 API。

我面临的问题是,这个 lambda 授权器会定期失败。

如果我通过传递 ID 令牌调用第一个 API,它就可以工作。如果我一次又一次地调用相同的 API,它就可以工作。 但是,如果我调用使用相同 Lambda 授权方的不同 API,它会失败。 我收到“401 unauthorized”错误。

我检查了 CloudWatch 日志,我可以看到 Lambda 在 lambda 授权成功时被调用。 但是我没有看到 lambda 函数被调用,当我收到 401,未授权错误时。

我不确定这个问题是否与 lambda 调用有关,还是因为我正在为每次调用获取 Cognito 公钥。

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cognito


    【解决方案1】:

    通过将 lambda 授权方的 API 网关中的 TTL 值设置为 0 解决了这个问题。

    在 Lambda 授权方代码中,允许对特定方法 ARN 进行访问。

    API 网关正在缓存响应。下次调用同一个API,调用成功。

    但如果调用了不同的 API,访问将被拒绝,因为仅允许第一种方法访问。

    我找到了以下有用的链接 -

    https://forums.aws.amazon.com/thread.jspa?threadID=225934

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-20
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多