gpt4 book ai didi

android - 向 AWS Userpool 验证社交身份联合身份验证用户? - 安卓

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:41:31 26 4
gpt4 key购买 nike

我们已将 com.amazonaws:aws-android-sdk-cognitoidentityprovider:2.6.8 SDK 用于基于用户名和密码的登录和注册流程。按照此处提到的方法 https://docs.aws.amazon.com/cognito/latest/developerguide/tutorial-integrating-user-pools-android.html .注册和登录过程按要求进行。

对于 Facebook 和 Google 通过联合身份验证,我们不想为此目的使用托管 UI,也不使用联合身份。我们点击了此链接 https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html .

  1. 我们设置了带有应用程序客户端和用户池的用户池域。
  2. 将 Facebook 设置为社交身份提供商。
  3. 向移动设备添加了 android 回调 URL。

第一种方法

我们研究了 CognitoSyncDemo 示例应用程序,它使用联合身份,因此我们不得不放弃它。我们只是在用户池中使用联合。

第二种方法

我们已经使用了 webview 并加载了以下 URL。该 URL 将我直接带到 Facebook,经过身份验证后,它会返回到带有 access_token、auth_type、expires in 和 id_token 的重定向 URL。但没有刷新 token 。网址 https://yourdomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?redirect_uri=redirect_app_path&response_type=code&client_id="client_id"&identity_provider=Facebook

但是使用这种方法有一个问题。我找不到将访问 token 推送到管理用户 session 的 SDK 中的 cognitoUserSession 的方法。所以每次我注册 Facebook(使用 webview)时,SDK 中都没有 session 维护。因此我再次被重定向到登录 View 。如何确保 Facebook 用户通过 cognitoidentityprovider 的身份验证和登录?如何在获取access_token和id_token时在SDK中创建用户 session ?

第三种方法

我们尝试使用 Cognito Auth Demo https://github.com/awslabs/aws-sdk-android-samples/tree/master/AmazonCognitoAuthDemo .为此,我们必须添加另一个库 com.amazonaws:aws-android-sdk-cognitoauth。单击登录后,它曾经将我们带到 hosted-ui。在研究了类似的 IOS 项目后,我们对 android 库项目进行了调整(com.amazonaws:aws-android-sdk-cognitoauth for android)。我们在 URI 中添加了 identity_provider 用于登录。然后它将我们直接带到 chrome 选项卡上的 Facebook。身份验证后,它在我们的应用程序中设置 session 。但它有自己的身份验证对象,即 AuthSession 但之前我们使用 CogintoUserSession 进行正常注册。 AuthSession 没有用户属性,也不提供任何获取用户详细信息或身份验证处理程序。如果我们使用这种方法,那么如何将 AuthSession 与 CognitoUserSession 链接起来并管理应用程序中的用户 session ?

总结

简而言之,我们已经厌倦了 AWS 示例,它将我们带到基于 Web 的托管 UI。我们需要仅使用联合身份提供者通过 Facebook 向用户池验证用户。我们需要在 Cognito SDK 中维护 session ,而不影响我们基于用户名和密码的登录流程。我们希望在单击按钮时直接或在我们的应用程序中的 webview 上打开 Facebook,验证用户并仅使用 Cognito SDK 在应用程序中维护 session 。

最佳答案

为了连接到用户池,我包含了 aws-android-sdk-cognitoidentityprovider。但是,如果您需要添加社交注册,则还需要添加 cognitoauth。

  1. 确保 cognito sdk 版本相同,否则您可能会遇到复杂的错误。

  2. 根据项目需要,我需要将身份提供者传递给 sdk,以便它可以直接导航到我的社交身份提供者页面。但是当前的 sdk 版本 '2.6.24' 并没有为我提供这个规定。我已经从 awslab github 下载了 android-sdk-cognitoauth sdk 并包含在我的项目中。我改变了 Auth.java 类,在其中添加了身份提供者变量。

  3. 下一步,我将更改 AuthClient.java 方法 launchCognitoAuth。我放置了额外的条件来检查身份提供者是否存在。然后我将它设置在 uri 中。

    if (pool.getIdentityProvider() != null) {
    builder.appendQueryParameter(ClientConstants.DOMAIN_QUERY_PARAM_IDENTITY_PROVIDER, pool.getIdentityProvider().toString());
    }

  4. 进行上述更改后,我可以通过我的应用程序在 auth.builder() 中配置身份提供者。黑客成功了,我直接导航到我的供应商页面。身份验证后,sdk 会自行设置 session 。

总而言之,我发现了android和ios项目实现之间的差异。在 iOS 项目中,aws 已经给出了直接添加身份提供者的规定。我按照 ios 项目的流程对 android congitio-auth 项目进行了调整。差异也已报告给 aws-sdk-android-sample issues .

关于android - 向 AWS Userpool 验证社交身份联合身份验证用户? - 安卓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51185577/

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