![](/img/trans.png)
[英]Android AWS Cognito UserPool globalSignout not working when user is signed in from multiple devices
[英]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 。
第一種方法
我們研究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。
確保cognito sdk版本相同,否則您可能會遇到並發錯誤。
根據項目的需要,我需要身份提供者傳遞到sdk,以便它可以直接導航到我的社交身份提供者頁面。 但是目前的sdk版本“ 2.6.24 ”並未向我提供此條款。 我從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 問題的不同之處 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.