【发布时间】:2018-12-13 14:20:51
【问题描述】:
我们使用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。
第一种方法
我们查看 CognitoSyncDemo 示例应用程序,它使用联合身份,因此我们不得不放弃它。我们只是在用户池中使用联邦。
第二种方法
我们使用了 webview 并加载了以下 URL。该 URL 将我直接带到 Facebook,经过身份验证后,它返回给我以使用 access_token、auth_type、expires 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 中都没有会话维护。因此,我再次被重定向到登录视图。如何确保 Facebook 用户通过 cognitoidentityprovider 的身份验证和登录? SDK获取access_token和id_token时如何创建用户会话?
第三种方法
我们尝试使用 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。身份验证后,它在我们的应用程序中设置会话。但它有自己的身份验证对象,即 AuthSession,但之前我们使用 CogintoUserSession 进行正常注册。 AuthSession 没有用户属性,也不提供任何获取用户详细信息或身份验证处理程序。如果我们使用这种方法,那么如何将 AuthSession 与 CognitoUserSession 链接并在应用程序中管理用户会话?
总结
简而言之,我们已经厌倦了 AWS 示例,它正在将我们带到基于 Web 的托管 UI。我们需要仅使用联合身份提供者通过 Facebook 向用户池验证用户身份。我们需要在 Cognito SDK 中维护会话,而不影响我们基于用户名和密码的登录流程。我们希望在单击按钮时直接打开 Facebook 或在应用程序中的 webview 上打开 Facebook,对用户进行身份验证并仅使用 Cognito SDK 在应用程序中维护会话。
【问题讨论】:
标签: android facebook-login amazon-cognito aws-userpools