在 Cognito 中链接第三方应用程序帐户

Posted

技术标签:

【中文标题】在 Cognito 中链接第三方应用程序帐户【英文标题】:Link a third party application account in Cognito 【发布时间】:2020-11-05 00:17:17 【问题描述】:

我需要将第三方应用程序凭据链接到用户用于通过 Cognito 连接到我的应用程序的凭据。换句话说:用户连接到应用程序 A(我的应用程序),然后应用程序 A 要求用户提供凭据以连接到应用程序 B。然后应用程序 A 使用用户提供的凭据与应用程序 B 交互。我想链接这些身份,但让用户仅使用我提供给他的凭据(而不是他用于 B 的凭据)连接到应用程序 A。

AWS 在 Cognito 中有 AdminLinkProviderForUser 不满足最后一个要求。

应用程序 B 提供多种身份验证:Form、Basic HTTP、SSO、OAuth2 和 OpenID。

有没有什么办法可以按照上面描述的方式链接两个身份,并存储在 Cognito 中以备将来使用?

【问题讨论】:

查看这篇由 AWS aws.amazon.com/blogs/mobile/…撰写的文章 【参考方案1】:

如果我对您的理解正确 - 您需要让用户使用他们在另一个应用程序中拥有的凭据登录您的应用程序,然后存储他们对该应用程序的登录信息,并为他们提供新的登录详细信息,其中这些登录详细信息将它们链接到您的应用程序和该应用程序。

看看这里:https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html

但是采用这种方法,用户仍将使用应用程序 B 的详细信息登录。但是 Cognito 提供了开箱即用的功能。

如果由于某种原因您不想采用这种方法 - 并且您想强制更改密码,您必须自己进行链接。

建议的方法如下(在 Cognito 用户池中使用 Lambda 触发器):

注册前 lambda 触发器:

获取用户凭据 使用凭证在该 lambda 函数中调用 应用 B。 从该调用中获取身份验证响应 将此作为参数传递给您的 Cognito 用户属性 使用 AdminCreateUser(https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html) 拨打电话

现在您将用户与来自应用程序 B 的身份验证数据一起存储为自定义属性。

但这不是最好的方法,因为通常需要刷新身份验证数据,这会增加额外的复杂性。您可以在为用户更新该自定义属性的预身份验证触发器中进行刷新。

老实说,如果应用程序 B 是自定义的,我认为对您来说最好的方法是使用 OIDC Provider 方法https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-oidc-idp.html

【讨论】:

以上是关于在 Cognito 中链接第三方应用程序帐户的主要内容,如果未能解决你的问题,请参考以下文章

Cognito缺乏IDP发起的SSO

无法将PayPal沙盒帐户链接到第三方权限

AWS Cognito 与 django 休息框架反应 js?

如何获取 Expo 静态深度链接进行开发?

如何访问 Cognito 用户帐户的组?

通过 javascript 请求和响应第三方域