使用 Google 的 Cognito 联合登录失败

Failed Cognito Federated Sign-In with Google

我正在开发一个项目,我们有现有的 Google 登录,我们想转换到 AWS Cognito,以便我们可以获得用户名和密码身份验证以及其他社交登录,例如 Facebook不久的将来。在我们 API 的功能分支中,我们通过 JWT 进行 Cognito 身份验证。 我当前的问题是为 Cognito 的 JWT 交换 Google 身份验证响应负载。

在我们的 JavaScript 中,我能够获得具有 tokenId 字段的 Google 身份验证响应对象。据我了解,我应该能够与 Cognito 交换他们的 JWT,我可以用它来与我的 API 进行交互。我在 Cognito 用户池中创建并配置了 Google 应用程序。

在试图解决这个问题时令人沮丧的是,所有文档似乎都集中在新应用程序上,或者只集中在 Cognito 的托管 UI 上。我已经研究过 GitHub issues and blog posts,声称这应该很容易。我希望我错过了一些简单的东西。

作为参考,这是我必须使用 Cognito 登录并提取 JWT 的代码。

const user = await Auth.signIn(username, password);
dispatch(addToken(user.signInUserSession.idToken.jwtToken));

这是我们用于 Google 登录的库:https://www.npmjs.com/package/react-google-login

您是否已将 Google 配置为 Cognito 用户池中的联合 IdP? https://aws.amazon.com/premiumsupport/knowledge-center/cognito-google-social-identity-provider/

您不能在客户端使用第三方令牌并与 Cognito 交换它们以获得 Userpool 令牌。

您可以用客户端第三方令牌交换身份池令牌。

我认为这个关于常见场景的页面可能会帮助您形象化流程 https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-scenarios.html

您可能需要做以下两件事之一;

  • 设置身份池,然后将您的 google 令牌交换为身份池令牌。请记住,身份池只能提供授权(而非身份验证),因此如果您需要来自 Cognito 的用户池数据,这不适合您。
  • 改变你的方法,让 Cognito 与 Google 进行交换。它会 return 你一个代码,然后你用你的 Userpool 令牌端点交换 Userpool 令牌。