使用 Cognito 在 2 个 Web 应用程序之间进行 SSO 集成

问题描述 投票:0回答:1

我们有一个要求,需要外部合作伙伴的用户能够访问我们的 Web 应用程序。

外部合作伙伴设置:在自己的 AWS 账户上使用 Cognito 用户池的 Web 应用程序

我们的设置:在我们的 AWS 帐户上使用 Cognito 用户池(用户名/密码身份验证)来 React 应用程序。

要求是:我们合作伙伴的用户将登录合作伙伴的网站。经过身份验证后,他们将登陆主页并看到我们网站的链接。 单击链接后,我们的网络应用程序必须在新选项卡中启动,用户必须经过验证(可能在此之前在我们的 Cognito 中进行配置)并允许访问我们的应用程序主页,而无需再次登录。

我们的应用程序是使用 S3/Cloudfront 托管的 React SPA。我们在 Cognito 中设置了一个用于 UI 的应用程序客户端。当用户尝试访问该应用程序时,他们会看到一个自定义登录屏幕。一旦凭证经过验证(在 React 应用程序中使用 Amplify Auth 完成),令牌就会在本地存储中创建并用于调用 REST API 等。

因此,我们需要为从合作伙伴网站访问我们网站的用户复制类似的行为。

一直在阅读与 SSO / OAuth 2.0 / OIDC 相关的文章,寻找以下信息:

  • 合作伙伴是否需要对其用户池进行任何配置更改 达到这个目的?

  • 我们需要对我们的用户池做出哪些改变?

  • 如何从合作伙伴网站访问我们的网络应用程序(GET on
    我们的主页或发布一些信息,如令牌等..)?

  • 我们需要在 UI 应用程序代码中进行哪些更改才能适应
    这个?

找到一篇关于联合 2 个 Cognito 的文章:

https://community.aws/content/2bUvwgyFoeJdjGYgpnRkejYAgYC/how-to-add-cognito-as-oidc-identity-provider-in-cognito?lang=en

但是这种设置意味着我们的合作伙伴用户必须登录(使用 iDP 联盟)才能访问我们的应用程序,这不是预期的行为(使用 SSO 才能无缝访问两个站点)。

如果有人有任何解决方案/指示,请分享,我们将不胜感激。

javascript reactjs amazon-web-services single-sign-on amazon-cognito
1个回答
0
投票

您发布的链接显示了正确的 OIDC 解决方案。 该链接所谓的“客户用户池”实际上就是您所说的合作伙伴应用程序。 登录不会使用您的应用程序,而是使用合作伙伴网站的登录页面。 合作伙伴的网站是使用 Cognito 实现的这一事实并不重要。 合作伙伴可以是 Facebook、Google 或其他一些 OIDC 提供商。 在任何这些情况下,您的应用程序都会使用 OIDC 向合作伙伴发起登录,登录后,OIDC 提供商(合作伙伴)将向您发送信息,您可以使用该信息来建立用户,如步骤 12 所示您引用的页面上的图表,复制如下: Auth flow between 2 Cognito pools, as shown on https://community.aws/content/2bUvwgyFoeJdjGYgpnRkejYAgYC/how-to-add-cognito-as-oidc-identity-provider-in-cognito?lang=en

如果用户已经登录合作伙伴的网站,那么当您的应用程序启动该图中的步骤 #2 请求时(即,您将他们的浏览器重定向到“授权”端点以启动与 OIDC 提供商的身份验证过程) ),合作伙伴网站将识别他们,并且不会强迫他们再次输入凭据。 它将使用他们已经建立的凭据,并将令牌发回您的 Cognito,您的 Cognito 可以并且将使用该令牌来识别和建立用户。 他们将显示在您的 Cognito 中,确认状态为“外部提供商”。

关键点是 Cognito 是一个 OIDC 提供商。 因此您可以像与任何 OIDC 提供商一样将其集成。

© www.soinside.com 2019 - 2024. All rights reserved.