2016-05-13 154 views
1

我想使aws android認知工作只有developer authenticated identities。但是得到以下例外(sdk版本2.2.16)。Android aws cognito無效的登錄令牌。不是Cognito令牌

我有交叉檢查identityId和identityPoolId,兩個值都是正確的。

在loginsMap中,我將密鑰用作「cognito-identity.amazonaws.com」,並將令牌作爲從我的服務器後端收到的openId令牌。

loginsMap正在我的android AWSAbstractCognitoDeveloperIdentityProvider類的refresh和getIdentityId方法中設置。

有人遇到過這種類似的問題嗎?

com.amazonaws.services.cognitoidentity.model.NotAuthorizedException: Invalid login token. Not a Cognito token. (Service: AmazonCognitoIdentity; Status Code: 400; Error Code: NotAuthorizedException; Request ID: a270a26a-18fa-11e6-add3-c1b3dbd555de) 
                    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:716) 
                    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:392) 
                    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:199) 
                    at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.invoke(AmazonCognitoIdentityClient.java:533) 
                    at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.getCredentialsForIdentity(AmazonCognitoIdentityClient.java:468) 
                    at com.amazonaws.auth.CognitoCredentialsProvider.populateCredentialsWithCognito(CognitoCredentialsProvider.java:627) 
                    at com.amazonaws.auth.CognitoCredentialsProvider.startSession(CognitoCredentialsProvider.java:553) 
                    at com.amazonaws.auth.CognitoCredentialsProvider.refresh(CognitoCredentialsProvider.java:503) 
                    at com.amazonaws.auth.CognitoCachingCredentialsProvider.refresh(CognitoCachingCredentialsProvider.java:463) 
                    at com.amazonaws.auth.CognitoCachingCredentialsProvider.getIdentityId(CognitoCachingCredentialsProvider.java:414) 
                    at com.amazonaws.auth.CognitoCredentialsProvider.populateCredentialsWithCognito(CognitoCredentialsProvider.java:621) 
                    at com.amazonaws.auth.CognitoCredentialsProvider.startSession(CognitoCredentialsProvider.java:553) 
                    at com.amazonaws.auth.CognitoCredentialsProvider.refresh(CognitoCredentialsProvider.java:503) 
                    at com.amazonaws.auth.CognitoCachingCredentialsProvider.refresh(CognitoCachingCredentialsProvider.java:463) 

回答

2

你應該把開發商提供者名稱,在登錄地圖鍵和SDK將採取必要時旋轉,爲「cognito-identity.amazonaws.com」對你的照顧。

您必須做的另一件事是更新您從後端獲得的身份標識以及令牌。如果SDK緩存中的身份標識爲A,並且令牌表示它屬於身份標識B,則會拋出「Not a Cognito Token」。錯誤。理想情況下,您應該使用update()方法在從後端刷新身份標識和令牌後更新身份標識和令牌。

Developer Authenticated Identities對此進行了更詳細的解釋。您還應該看看我們的sample app中的流程。希望這可以幫助。

+0

我已經更新刷新以及getidentityid方法更新(identityid,令牌)。此外,從我的服務器收到相同的身份和令牌,如果我嘗試從iOS SDK的工作。我已經使用了示例應用程序中提供的相同代碼。 –

+0

但示例應用程序未在登錄地圖中設置「cognito-identity.amazonaws.com」。它在[DeveloperAuthenticationTask]的登錄映射中添加開發者提供者名稱(https://github.com/awslabs/aws-sdk-android-samples/blob/master/CognitoSyncDemo/src/com/amazonaws/cognito/sync/demo /DeveloperAuthenticationTask.java#L54)。你也改變了嗎? –

+0

是的,我刪除了「cognito-identity.amazonaws.com」,而是使用提供者名稱。現在它正在工作。謝謝你的幫助 !! –