AWS cognito - 在使用 google 从 aws cognito 登录时,是否可以获取 google 访问令牌并使用 aws 访问令牌刷新

AWS cognito - Is it possible to get google access token and refresh using aws access token when sign in using google in from aws cognito

当我使用 google 从 aws cognito 登录页面登录时,它 return 返回 aws 访问令牌。是否可以使用 aws 令牌检索 google 访问令牌和刷新令牌。 url 用于登录 - https://example.auth.ap-southeast-1.amazoncognito.com//login?redirect_uri=redirect_uri&response_type=token&client_id=client_id.

aws cognito 在使用 google 签名时如何处理刷新令牌?

简而言之,没有。

当您使用上述 URL 通过 Cognito 用户池的 OAuth 端点登录时,来自 google 的响应(即令牌)将发送到用户池域的 OAuth 响应端点( https://example.auth.ap-southeast-1.amazoncognito.com/oauth2/idpresponse)。 Cognito 检查来自 Google 的响应并生成 ID、访问和刷新令牌,并根据所使用的范围和身份验证流程向您生成 returns。来自 Google 的响应,即 google 令牌未存储在某处,并且没有 Cognito API 调用来检索相同的内容。

至于使用 Google 登录时的令牌刷新,这取决于您的刷新令牌(由 Cognito 返回,而不是 Google 的刷新令牌)。只要从 Cognito 返回的刷新令牌有效,您就可以使用它来获取新的 id/access 令牌。同样,这个过程根本不涉及 Google。

这不是一个完全有效的解决方案,但您可以在 Cognito 中创建自定义属性,并将它们映射到属性映射屏幕中:

然后当用户登录时,我看到捕获了access_tokenexpired_in。但是我没有看到refresh_token。没有 refresh_token 我们将无法从后端访问 api。唉,这似乎太接近了!

我将在 Sourav Sarkar 的回答的基础上提出一个您可以尝试的想法。如果您设置Google作为 OIDC 提供者(不是内置 Cognito 的提供者),您可以尝试添加以下任一范围:

  1. 离线
  2. offline_access

我们必须包含这些的原因是因为 by 默认情况下,Google 仅 returns 访问令牌 而不是刷新令牌。您必须指定您需要刷新令牌才能检索它。

虽然公平警告,但我不确定哪个会起作用,也不确定添加任何作用域是否会起作用,因为我自己还没有尝试过。

如果您出于某种原因确实需要刷新令牌,例如Google API 电话,你可以使用 Auth0,因为这是他们产品中内置的。 我也没有尝试过,这也是我面临的问题现在因为我不想使用 Auth0.

以下是我的参考资料: AWS OpenID Connect Oath 2.0 Scopes Google OAuth 2.0