2017-05-25 280 views
0

我正在使用Amazon Cognito Mobile SDK登錄到我的應用程序(https://github.com/awslabs/aws-sdk-android-samples/tree/master/AmazonCognitoYourUserPoolsDemo)。AWS Cognito SDK令牌過期

該應用程序不斷從DynamoDB中檢索數據(每5秒)。

但是大概一個小時後,當試圖撥打DynamoDB的電話時,令牌過期並且SDK似乎沒有刷新令牌,我收到NotAuthorizedException異常,如下所示。

我該如何處理令牌過期?謝謝!

05-25 15:27:25.282 2540-3428/com.test.example D/AWSRefreshingCognitoIdentityProvider: Refreshing token... 
05-25 15:27:25.282 2540-3428/com.test.example D/CognitoUserPoolsSignInProvider: cognito-idp.eu-west-1.amazonaws.com/eu-west-1_pHznonQVB 
05-25 15:27:26.718 2540-3428/com.test.example E/CognitoCachingCredentialsProvider: Failure to get credentials 
                           com.amazonaws.services.cognitoidentity.model.NotAuthorizedException: Invalid login token. Token expired: 1495725747 >= 1495723433 (Service: AmazonCognitoIdentity; Status Code: 400; Error Code: NotAuthorizedException; Request ID: a91e8404-415e-11e7-8a00-bd0979d3092f) 
                            at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:720) 
                            at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:394) 
                            at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:200) 
                            at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.invoke(AmazonCognitoIdentityClient.java:558) 
                            at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.getOpenIdToken(AmazonCognitoIdentityClient.java:503) 
                            at com.amazonaws.auth.AWSAbstractCognitoIdentityProvider.getToken(AWSAbstractCognitoIdentityProvider.java:198) 
                            at com.amazonaws.auth.AWSAbstractCognitoIdentityProvider.refresh(AWSAbstractCognitoIdentityProvider.java:314) 
                            at com.amazonaws.auth.AWSBasicCognitoIdentityProvider.refresh(AWSBasicCognitoIdentityProvider.java:77) 
                            at com.amazonaws.mobile.user.IdentityManager$AWSRefreshingCognitoIdentityProvider.refresh(IdentityManager.java:142) 
                            at com.amazonaws.auth.CognitoCredentialsProvider.startSession(CognitoCredentialsProvider.java:601) 
                            at com.amazonaws.auth.CognitoCredentialsProvider.getCredentials(CognitoCredentialsProvider.java:388) 
                            at com.amazonaws.auth.CognitoCachingCredentialsProvider.getCredentials(CognitoCachingCredentialsProvider.java:442) 
                            at com.amazonaws.mobile.user.IdentityManager$AWSCredentialsProviderHolder.getCredentials(IdentityManager.java:71) 
                            at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:4168) 
                            at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.updateItem(AmazonDynamoDBClient.java:1582) 
                            at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper$SaveObjectHandler.doUpdateItem(DynamoDBMapper.java:1173) 
                            at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper$2.executeLowLevelRequest(DynamoDBMapper.java:873) 
                            at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper$SaveObjectHandler.execute(DynamoDBMapper.java:1056) 
                            at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.save(DynamoDBMapper.java:904) 
                            at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.save(DynamoDBMapper.java:733) 
                            at java.lang.Thread.run(Thread.java:761) 
05-25 15:27:26.718 2540-3428/com.test.example D/CognitoCachingCredentialsProvider: Identity id is changed 
05-25 15:27:26.718 2540-3428/com.test.example D/CognitoCachingCredentialsProvider: Saving identity id to SharedPreferences 
05-25 15:27:26.719 2540-3428/com.test.example D/CognitoCachingCredentialsProvider: Clearing credentials from SharedPreferences 
05-25 15:27:26.720 2540-3428/com.test.example D/AWSRefreshingCognitoIdentityProvider: Refreshing token... 
05-25 15:27:26.720 2540-3428/com.test.example D/CognitoUserPoolsSignInProvider: cognito-idp.eu-west-1.amazonaws.com/eu-west-1_pHznonQVB 
05-25 15:27:27.329 2540-3428/com.test.example W/MainActivity: run cx: com.amazonaws.services.cognitoidentity.model.NotAuthorizedException: Invalid login token. Token expired: 1495725748 >= 1495723433 (Service: AmazonCognitoIdentity; Status Code: 400; Error Code: NotAuthorizedException; Request ID: a97ea5b2-415e-11e7-9bf5-c9c8136baadf) 
05-25 15:27:27.329 2540-3428/com.test.example D/AWSMobileClient: AWS Mobile Client is OK 
+0

你解決了這個問題嗎?我有同樣的問題,我不知道如何解決它!請給我一些幫助 – Onivas

回答

0

一種可能的方法是使用您的RefreshToken來檢索新的身份/訪問令牌。我知道在cognito-javascript SDK中,會話對象會自動爲你做。