我正在尝试使用developer authenticated identities
制作aws android cognito。但得到以下异常(sdk版本2.2.16)。
我已经交叉检查了identityId和identityPoolId,两个值都是正确的。
在loginsMap中,我使用键作为" cognito-identity.amazonaws.com
"和token作为从我的服务器后端收到的openId令牌。
我的android AWSAbstractCognitoDeveloperIdentityProvider
类的refresh和getIdentityId方法中设置了loginsMap。
有人遇到过这种类似的问题吗?
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)
答案 0 :(得分:2)
您应该将开发者提供者名称作为密钥放在登录映射中,如果需要,SDK将负责将其转发给“cognito-identity.amazonaws.com”。
您必须做的另一件事是更新从后端获得的身份ID以及令牌。如果SDK缓存中的身份标识为A且标记表明它属于标识ID B,则我们将抛出“非Cognito标记”。错误。理想情况下,您应该使用update()方法在从后端刷新身份ID和令牌后更新它们。
Developer Authenticated Identities更详细地解释了这一点。您还应该查看sample app中的流程。希望这会有所帮助。