如何使用认知 ID 令牌作为 API 网关的授权标头?



我有一个API http网关(比如说 https://example.com)与使用Cognito授权方的API REST网关集成在一起。所有这些都是为了服务于单页 React 应用程序。行为符合预期:

  • 我启动了 Cognito 托管的 UI 并登录,
  • 它重定向到网址 https://example.com/#id_token=123
  • 如果我使用 PostMan,如果我在授权标头中传递该id_token,我可以访问该 URL。

现在我的问题是:如何在登录后自动传递标头以便访问 https://example.com?

我花了很长时间在这个上面,发现很多类似的帖子都没有答案:

  • 如何使用从 Cognito 返回的代码获取 AWS 凭证?
  • 如何自动链接认知令牌和 API 身份验证标头?
  • AWS Cognito 托管的 UI 在 URL 中返回id_token
  • 如何使 AWS Cognito(托管 UI)的redirect_uri进行身份验证?
  • 在将客户端从 Cognito 重定向到 AWS API 网关时设置授权标头
  • 如何处理 Lambda/API 网关 for UI 的 Cognito 身份验证重定向?

几年前我们遇到了同样的问题。我们的解决方案是创建一个代理(使用 API 网关和 Lambda),将id_token(存储在 cookie 中)"移动"到服务器的每个请求的Authorization标头。这很丑陋,但它奏效了。

顺便说一句,在 URL 中获取id_tokenImplicit Grant的工作方式。但Implicit Grant通常被认为不如Authorization Code Grant安全。此后,我们从Implicit Grant迁移到Authorization Code Grant。但是,我们继续使用代理模式(再次使用 API 网关和 Lambda),如下所示。

  1. 将返回的code交换为 Cognito 用户池令牌端点上的access_tokenid_token。将令牌存储在 DynamoDB 表中,并将session_cookie作为分区键。将session_cookie作为 cookie(带有HttpOnlySecureSameSite=Strict)返回给浏览器。
  2. 对于来自浏览器的每个请求,使用 Cookie 在 DynamoDB 表中查找令牌,并将令牌放在Authorization标头中。

最新更新