首页 文章

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

提问于
浏览
5

我们使用 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 .

  • 我们已经设置了具有应用程序客户端和用户池域的用户池 .

  • 将Facebook设置为社交身份提供商 .

  • 添加了android回调URL到手机 .

First Approach

我们研究CognitoSyncDemo示例应用程序,它使用联合身份,因此我们不得不丢弃它 . 我们只是在userpool中使用联合 .

Second Approach

我们使用了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中创建用户会话?

Third Approach

我们尝试使用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链接并管理应用程序中的用户会话?

Summary

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

1 回答

  • 0

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

    • 确保cognito sdk版本相同,否则您可能会遇到并发错误 .

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

    • 下一步,我改变了AuthClient.java方法 launchCognitoAuth . 我提出了额外的条件来检查身份提供者是否存在 . 然后我在uri中签名 .

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

    • 进行上述更改后,我可以通过我的应用程序在auth.builder()中配置身份提供程序 . 黑客工作,我直接导航到我的提供商页面 . 验证后,sdk将会话设置为自己 .

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

相关问题