在android中使用Cognito标识集成用户池

在android中使用Cognito标识集成用户池,android,aws-sdk,amazon-cognito,Android,Aws Sdk,Amazon Cognito,我一直在尝试修复使用Cognito标识同步用户池登录时的问题 下面是使用带有Cognito标识的Integrate用户池的代码片段 private AuthenticationHandler authenticationHandler = new AuthenticationHandler() { @Override public void onSuccess(CognitoUserSession userSession, CognitoDevice device) {

我一直在尝试修复使用Cognito标识同步用户池登录时的问题

下面是使用带有Cognito标识的Integrate用户池的代码片段

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());


}
private AuthenticationHandler AuthenticationHandler=new AuthenticationHandler(){
@凌驾
public void onSuccess(CognitoUserSession userSession,CognitoDevice设备){
//在Cognito中同步用户池登录
syncCognitoLogin(用户会话);
}
@凌驾
公共失效失效失效(例外e){
Log.d(“AlexaCognitoLoginFragment”,“onFailure错误:+e.getMessage());
}
@凌驾
public void getMFACode(MultiFactorAuthenticationContinuation arg0){
}
@凌驾
public void getAuthenticationDetails(AuthenticationContinuation,
字符串(用户名){
//设置身份验证详细信息
AuthenticationDetails AuthenticationDetails=新的AuthenticationDetails(用户名“12345678”,null);
continuation.setAuthenticationDetails(authenticationDetails);
continuation.continuateTask();
}
@凌驾
公共无效身份验证挑战(ChallengeContinuation arg0){
}
};
私有void syncognitologin(最终CognitoUserSession会话){
if(cognitoSyncManager==null){
抛出新的IllegalStateException(“同步管理器尚未初始化”);
}
新建异步任务(){
@凌驾
受保护的Void doInBackground(Void…参数){
Map logins=cachingCredentialsProvider.getLogins();
如果(登录=空){
logins=newhashmap();
}
logins.put(“cognito idp.+Regions.US_EAST_1+”.amazonaws.com/“+USER_POOL_ID,session.getIdToken().getJWTToken());
cachingCredentialsProvider.setLogins(登录名);
String identityID=cachingCredentialsProvider.getIdentityId();
Log.i(标记“Identity ID=“+identityID”);
返回null;
}
}.execute();
Log.i(标记“会话的Cognito登录同步成功”+会话.getIdToken().getJWTToken());
}
尝试登录时出错

E/CognitoCachingCredentialsProvider:获取凭据失败 E/CognitoCachingCredentialsProvider:com.amazonaws.services.cognitoidentity.model.NotAuthorizedException:此标识池不支持未经身份验证的访问。(服务:Amazon认知身份;状态代码: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/CognitocChingCredentialsProvider:com.amazonaws.services.cognitoidentity.amazonCongnitoIdentityClient.invoke(amazonCongnitoIdentityClient.java:558) E/CognitocChingCredentialsProvider:com.amazonaws.services.cognitoidentity.amazonCongnitoIdentityClient.getId(amazonCongnitoIdentityClient.java:444) E/CognitoCachingCredentialsProvider:com.amazonaws.auth.AWSAbstractCognitoIdentityProvider.getIdentityId(AWSAbstractCognitoIdentityProvider.java:172) E/CognitoCachingCredentialsProvider:com.amazonaws.auth.AWSEnhancedCognitoIdentityProvider.refresh(AWSEnhancedCognitoIdentityProvider.java:76) E/CognotAchingCredentialsProvider:com.amazonaws.auth.CognotCredentialsProvider.startSession(CognotCredentialsProvider.java:561) E/CognotAchingCredentialsProvider:com.amazonaws.auth.CognotCredentialsProvider.getCredentials(CognotCredentialsProvider.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.amazondynamodclient.invoke(amazondynamodclient.java:4168) E/CognitoCachingCredentialsProvider:com.amazonaws.services.dynamodbv2.amazondynamodclient.getItem(amazondynamodclient.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/CognoticachingCredentialsProvider:at android.os.AsyncTask$2.call(AsyncTask.java:288) E/CognitoCachingCredentialsProvider:at java.util.concurrent.FutureTask.run(FutureTask.java:237) E/CognoticachingCredentialsProvider:at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) E/CognitoCachingCredentialsProvider:at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) E/CognitoCachingCredentialsProvider:at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) E/CognitoCachingCredentialsProvider:at java.lang.Thread.run(Thread.java:841)


您看到的错误表明您正试图以未经身份验证的方式访问联合身份(意味着未提供身份验证凭据),并且您的身份池不支持未经身份验证的身份验证