向AWS Userpool认证社交身份联合身份验证用户吗? -Android

时间:2018-07-05 07:29:51

标签: android facebook-login amazon-cognito aws-userpools

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

第二种方法

我们已使用Web视图并加载了以下URL。该URL将我直接带到Facebook,经过身份验证后,它使我返回到具有access_token,auth_type,expire in和id_token的重定向URL。但是没有刷新令牌。 网址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中都没有会话维护。因此,我再次重定向到登录视图。如何确保cognitoidentityprovider对Facebook用户进行身份验证和登录?获取access_token和id_token时如何在SDK中创建用户会话?

第三种方法

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

摘要

简而言之,我们已经厌倦了AWS示例,这使我们进入了基于Web的托管UI。我们仅需要使用联合身份验证提供程序通过Facebook验证用户到userpool的身份。我们需要在Cognito SDK中维护会话,而不会影响我们基于用户名和密码的登录流程。我们只想通过单击按钮直接在应用程序中打开Facebook或在Webview上打开Facebook,对用户进行身份验证并仅使用Cognito SDK维护应用程序中的会话。

1 个答案:

答案 0 :(得分:0)

要连接到用户池,我添加了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 issues中也报告了差异。