通过在 Cognito 调用中传递两个登录名,可以将多个 AWS Cognito 联合身份(例如,同一电子邮件的 Facebook 和 Google 登录名)合并为一个身份。但是知道我可以合并身份并不能回答我是否应该合并身份。
合并身份与保持身份分开的利弊是什么? (我们将用户配置文件存储在我们自己的数据库中;我们不使用 Cognito 用户池。如果我们不合并身份,那么我们的后端数据库将在我们的后端存储每个身份 ID 到正确用户 ID 的映射-结束数据库。)
这是当同一用户尝试同时使用 Facebook 和 Google 进行身份验证时应用程序的当前工作流程:
getOrCreateUserProfile
Lambda 函数使用 Cognito 身份 ID 作为 key 来查看该 Cognito 身份是否已与用户关联。 getOrCreateUserProfile
Lambda 函数找不到与此身份 ID 匹配的现有用户,但会找到具有相同电子邮件地址的另一个用户。 此时我们有三个选择:
选项 (B) 与选项 (C) 的优缺点是什么?以下是此比较的起点。我缺少什么优点/缺点?
合并身份
保持分开
我倾向于“保持独立”解决方案,因为它看起来更容易实现(没有额外的用户体验工作流程)并且对用户来说更容易(出于同样的原因:没有新的用户体验工作流程)。这是一个错误吗?
最佳答案
很难给你一个答案,我想你已经提供了所有可能解决方案的主要优缺点。
我只会尝试澄清其中的一些,我认为这是选择一种解决方案而不是另一种解决方案的关键。
首先,表明我也更喜欢保持单独的解决方案。让我试着解释一下原因。
从用户体验的角度来看,很明显,保持独立的解决方案对用户来说是一种更好的方法。为了合并不同社交提供商的身份,用户需要在更复杂的应用程序注册工作流程中使用他们登录。但是这个过程只是出于技术决策的动机,它不会为用户提供任何实际利益。
我认为一个更好和更简单的解决方案是只包含每个身份和相关电子邮件之间的映射,正如您在保持单独的解决方案中提出的那样,并让用户使用他或她喜欢的提供者透明地登录到应用程序“合并”,在您的应用程序代码中,所有这些登录机制。无论您用于存储用户信息的底层信息系统是什么类型,都可以轻松实现此要求。
还请考虑一下,如果您需要在您的应用程序中包含另一个不同的社交提供商,并且已经存在的用户想要使用该新提供商登录您的应用程序,将会发生什么情况:如何合并身份?用户是否应该再次重复该过程?
此外,身份合并功能是 Cognito 特有的功能。如果您采用合并解决方案,您将面临将应用程序与 AWS 和 AWS Cognito 紧密耦合的风险。如果您需要将您的应用程序移动到另一个云提供商或本地部署,您可能无法进行这样的关联。同样,某种身份信息与在保持独立的解决方案中采用的内部用户模型之间的映射似乎是一种更好且可移植的方法。
与 Cognito 不同步的风险可能是另一个大问题。恢复机制是什么?
保持独立解决方案的唯一真正缺点可能是您可能会从 AWS 产生更多费用。正如您在 product pricing documentation 中看到的那样,AWS 将针对每个月活跃用户 (MAU) 向您收费。如果你有更多的身份,就像保持独立的解决方案一样,可能会有更多的 MAU,你可能会产生更高的成本。在任何情况下,这些成本都不会高很多,不过,我相信保持独立解决方案提供的优势将弥补这种最低价格上涨。
最后,我不认为保留单独的解决方案是一个不太安全的选择:虽然您似乎正在联合身份以允许您的用户与 AWS 服务交互,但无论用户提供的实际身份如何,相同的策略和角色假设都将适用.
我认为合并解决方案最适合您拥有联合身份并且需要唯一标识用户而不管他们如何进行身份验证的场景,但可能会强制执行与使用基于 AWS 资源相关的某种策略(自定义角色假设等)仅在这些特定身份上,并且可能在您没有可用的应用程序后端时。
无论最终采用哪种解决方案,一个关键的成功因素将是保持用户模型和相关逻辑尽可能独立于用于验证用户的机制:保持独立的解决方案也有助于以这种方式思考。
关于amazon-web-services - 多个社交提供商的 AWS Cognito 联合身份 : better to merge identities or keep them separate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63496849/