繁体   English   中英

将社交身份联合用户身份验证到AWS Userpool? - Android

[英]Authenticate social identity federation user to AWS Userpool? - Android

我们使用了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示例应用程序,它使用联合身份,因此我们不得不丢弃它。 我们只是在userpool中使用联合。

第二种方法

我们使用了webview并加载了以下网址。 URL将我直接带到Facebook,经过身份验证后,它会将我返回到重定向URL,其中包含access_token,auth_type,expires in和id_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

但使用这种方法存在问题。 我无法找到一种方法将访问令牌推送到管理用户会话的SDK中的cognitoUserSession。 因此,每次我注册Facebook(使用webview)时,SDK中都没有会话维护。 因此,我被重定向到登录视图。 如何确保Facebook用户通过cognitoidentityprovider进行身份验证和签名? 获取access_token和id_token时如何在SDK中创建用户会话?

第三种方法

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

摘要

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

为了连接到用户池,我已经包含了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将会话设置为自己。

总而言之,我发现android和ios项目实现之间存在差异。 在iOS项目中,aws已直接添加标识提供程序。 我按照ios项目的流程进行了调整,并对android congitio-auth项目进行了调整。 已经报告了aws-sdk-android-sample 问题的不同之处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM