gpt4 book ai didi

ios - 如何将 Cognito 用户池与 Cognito 联合身份池集成

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:11:49 25 4
gpt4 key购买 nike

这是我们在应用中实现用户帐户的场景

  1. 用户会自动获得一个匿名的 guest 帐户
  2. 用户将个人资料数据保存到他们的 guest 帐户中
  3. 为了从另一台设备访问他们的 guest 帐户,用户必须注册并将他们的 guest 帐户转换为注册用户帐户
  4. 用户从另一台设备登录,获得对其注册用户帐户的访问权限,并有权访问他们之前保存的个人资料数据

我们不会强制用户完成第 3 步和第 4 步。只要他们不需要切换设备或将设备恢复出厂设置,他们就不会失去对访客帐户的访问权限。

使用 Amazon Mobile SDK 2.3.x 和 Cognito Federated Identity Pools,我们实现了上述步骤:

  1. 使用 Cognito 联合身份池创建未经身份验证的身份
  2. 使用 Cognito Data Sync 保存配置文件数据
  3. 使用 Facebook 作为登录提供商,将 Facebook 登录链接到未经验证的身份,从而将其转换为注册身份
  4. 从另一台设备使用 Facebook 登录,这会切换到之前设备的注册身份。用户有权访问之前保存在 Cognito Data Sync 中的个人资料数据

为实现这些步骤,我们在引入 Cognito 用户池之前使用了 AWS Mobile Hub 生成的示例代码。它结合使用了 AWSIdentityManager 和 AWSFacebookSignInProvider 及其支持代码。一切都按预期进行。

我们现在正尝试转换到最新的 Amazon Mobile SDK 2.4.9 并使用 Cognito 用户池而不是 Facebook 登录,以实现相同的流程:

  1. 同上
  2. 同上
  3. 用户使用 Cognito 用户池注册以创建用户池身份。使用用户名/密码登录。
  4. 用户在另一台设备上使用用户名/密码登录以切换到已注册的用户池身份。用户现在应该可以访问保存在 Cognito Data Sync 中的配置文件数据。

第 1 步和第 2 步是使用 AWSMobileHubHelper.framework 中的 AWSIdentityManager 实现的;第 3 步和第 4 步是使用 CognitoYourUserPoolsSample 示例项目中的示例代码实现的。

我们遇到的问题是:

  1. 在第 3 步中,注册会在用户池控制台中创建一个 Cognito 用户池身份。但是使用该注册用户登录不会将登录从用户池身份链接到身份池身份。
    • 在之前的实现中,身份提供商“graph.facebook.com”在身份池控制台中被列为链接登录。身份提供商“cognito-idp.us-east-1.amazonaws.com/us-east-1_123456789”应该有类似的内容,如 Integrating User Pools with Amazon Cognito Identity 中所述。
  2. 在第 4 步中,使用注册用户池身份的用户名/密码登录后,身份池身份永远不会切换到之前设备上的注册身份。 (可能是由于上面的问题)。因此,无法访问先前保存的配置文件数据。
    • 在 Facebook 实现中,之前的示例代码为我们完成了这项工作,并按照 Switching Identities 中的描述通知应用程序。在用户池实现中,通知永远不会到来。

我在这里遗漏了一个非常重要的步骤。我怀疑我没有明确地将 Cognito 用户池登录链接到 Cognito 身份池身份。在他们的 CognitoYourUserPoolsSample 中,他们没有给出如何将用户池身份与联合身份池集成的示例。

文档说只需执行此操作并且它是自动的,但我无法让它工作:

    AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:@"UserPool"];
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc]
initWithRegionType:AWSRegionUSEast1
identityPoolId:@“<identity-pool-id>"
identityProviderManager:pool];

AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider];
AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;

有人有任何想法或示例代码来演示该过程吗?我能找到的最接近的示例代码是这个 fork of CognitoSyncDemo ,它仍然不是我需要的。

最佳答案

凭证提供程序支持身份合并,但 AWSIdentityManager(mobile-hub-helper 的一部分)不支持。我有一个修改版的 mobile-hub-helper(它是 mobile-hub-helper github 的一个分支,地址为 https://github.com/BruceBuckland/aws-mobilehub-helper-ios)。该 fork 修改了 AWSIdentityManager 以支持几件事:1) 它支持编写新的 AWSSignInProviders(一种移动中心助手协议(protocol))并使用它们来恢复 session 。 2) 支持“Allow Merged Identities”和身份的合并。 3) 它有几个帮助方法来查找当前正在执行身份验证的提供者和提供者的友好名称,这对于向用户显示链接的内容很有用,并显示哪个提供者拒绝登录。

还有一个示例应用程序,其中包含用于 Cognito 用户池的 AWSSignInProvider 的 swift 实现。它演示了三个提供商(UserPools FaceBook 和 Google)的登录注销和帐户链接。它实现了用户池的多种功能,包括注册、登录、忘记密码、更新属性以及这些功能的确认。它位于 https://github.com/BruceBuckland/SignIn-awsmhh .

最后,我建议您看一下示例应用程序中的笔记 pdf。它们可以帮助您更好地理解码件的交互。我花了很长时间才理解 cognito,我把我的笔记放在一起试图为其他人阐明这个系统。他们在这里:Cognito Notes and Diagram

关于ios - 如何将 Cognito 用户池与 Cognito 联合身份池集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40118317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com