【发布时间】:2017-04-16 02:28:53
【问题描述】:
我一直在尝试解决将用户池登录与 Cognito Identity 同步时的问题。
以下代码 sn-p 使用具有 Cognito 身份的整数用户池
private AuthenticationHandler authenticationHandler = new AuthenticationHandler() {
@Override
public void onSuccess(CognitoUserSession userSession, CognitoDevice device) {
//Sync User pool login in Cognito
syncCognitoLogin(userSession);
}
@Override
public void onFailure(Exception e) {
Log.d("AlexaCognitoLoginFragment", "onFailure error : " + e.getMessage());
}
@Override
public void getMFACode(MultiFactorAuthenticationContinuation arg0) {
}
@Override
public void getAuthenticationDetails(AuthenticationContinuation continuation,
String userName) {
//set authentication details
AuthenticationDetails authenticationDetails = new AuthenticationDetails(userName, "12345678", null);
continuation.setAuthenticationDetails(authenticationDetails);
continuation.continueTask();
}
@Override
public void authenticationChallenge(ChallengeContinuation arg0) {
}
};
private void syncCognitoLogin(final CognitoUserSession session){
if(cognitoSyncManager == null){
throw new IllegalStateException("Sync Manager not yet initialized");
}
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
Map<String, String> logins = cachingCredentialsProvider.getLogins();
if(logins == null) {
logins = new HashMap<String, String>();
}
logins.put("cognito-idp." + Regions.US_EAST_1 + ".amazonaws.com/" + USER_POOL_ID, session.getIdToken().getJWTToken());
cachingCredentialsProvider.setLogins(logins);
String identityID = cachingCredentialsProvider.getIdentityId();
Log.i(TAG, "Identity ID=" + identityID );
return null;
}
}.execute();
Log.i(TAG, " Cognito Login sync successfully for session " + session.getIdToken().getJWTToken());
}
尝试登录时出错
E/CognitoCachingCredentialsProvider:获取凭据失败 E/CognitoCachingCredentialsProvider:com.amazonaws.services.cognitoidentity.model.NotAuthorizedException:此身份池不支持未经身份验证的访问。 (服务:AmazonCognitoIdentity;状态代码:400;错误代码:NotAuthorizedException;请求 ID:96dc9b9f-b7c1-11e6-9f6d-b3b036ebf640) E/CognitoCachingCredentialsProvider:在 com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:712) E/CognitoCachingCredentialsProvider:在 com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:388) E/CognitoCachingCredentialsProvider:在 com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:199) E/CognitoCachingCredentialsProvider:在 com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.invoke(AmazonCognitoIdentityClient.java:558) E/CognitoCachingCredentialsProvider:在 com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.getId(AmazonCognitoIdentityClient.java:444) E/CognitoCachingCredentialsProvider:在 com.amazonaws.auth.AWSAbstractCognitoIdentityProvider.getIdentityId(AWSAbstractCognitoIdentityProvider.java:172) E/CognitoCachingCredentialsProvider:在 com.amazonaws.auth.AWSEnhancedCognitoIdentityProvider.refresh(AWSEnhancedCognitoIdentityProvider.java:76) E/CognitoCachingCredentialsProvider:在 com.amazonaws.auth.CognitoCredentialsProvider.startSession(CognitoCredentialsProvider.java:561) E/CognitoCachingCredentialsProvider:在 com.amazonaws.auth.CognitoCredentialsProvider.getCredentials(CognitoCredentialsProvider.java:371) E/CognitoCachingCredentialsProvider:在 com.amazonaws.auth.CognitoCachingCredentialsProvider.getCredentials(CognitoCachingCredentialsProvider.java:441) E/CognitoCachingCredentialsProvider:在 com.amazonaws.auth.CognitoCachingCredentialsProvider.getCredentials(CognitoCachingCredentialsProvider.java:76) E/CognitoCachingCredentialsProvider:在 com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:4168) E/CognitoCachingCredentialsProvider:在 com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.getItem(AmazonDynamoDBClient.java:1232) E/CognitoCachingCredentialsProvider:在 com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.load(DynamoDBMapper.java:393) E/CognitoCachingCredentialsProvider:在 com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.load(DynamoDBMapper.java:466) E/CognitoCachingCredentialsProvider:在 com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.load(DynamoDBMapper.java:340) E/CognitoCachingCredentialsProvider:在 com.amazonaws.youruserpools.UserActivity$2.doInBackground(UserActivity.java:256) E/CognitoCachingCredentialsProvider:在 com.amazonaws.youruserpools.UserActivity$2.doInBackground(UserActivity.java:252) E/CognitoCachingCredentialsProvider:在 android.os.AsyncTask$2.call(AsyncTask.java:288) E/CognitoCachingCredentialsProvider:在 java.util.concurrent.FutureTask.run(FutureTask.java:237) E/CognitoCachingCredentialsProvider:在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) E/CognitoCachingCredentialsProvider:在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) E/CognitoCachingCredentialsProvider:在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) E/CognitoCachingCredentialsProvider: at java.lang.Thread.run(Thread.java:841)
【问题讨论】:
-
你能找到解决这个问题的方法吗,因为我面临同样的问题,如果你解决了问题,请告诉我
-
您在哪个环境中构建您的项目(Eclipse 或 andridStudio)?
-
我可以在将项目迁移到 AndroidStudio 后解决这个问题。
标签: android aws-sdk amazon-cognito