簡體   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