首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在android中集成具有认知身份的用户池

在android中集成具有认知身份的用户池
EN

Stack Overflow用户
提问于 2016-12-01 12:35:11
回答 2查看 3.5K关注 0票数 2

我一直试图解决这个问题时,同步用户池登录与认知身份。

下面的代码片段使用带有认知标识的整数用户池

代码语言:javascript
复制
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:此标识池不支持com.amazonaws.services.cognitoidentity.model.NotAuthorizedException:未经身份验证的访问。(服务: AmazonCognitoIdentity;状态代码: 400;错误代码: NotAuthorizedException;请求ID: 96dc9b9f-b7c1-11e6-9f6d-b3b036ebf 640)E/科格尼托CognitoCachingCredentialsProvider: at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:712) E/CognitoCachingCredentialsProvider: at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:388) E/com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:388) E/CognitoCachingCredentialsProvider: at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:199) E/CognitoCachingCredentialsProvider: at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.invoke(AmazonCognitoIdentityClient.java:558) E/CognitoCachingCredentialsProvider: com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.getId(AmazonCognitoIdentityClient.java:444) E/认知CognitoCachingCredentialsProvider: at com.amazonaws.auth.AWSAbstractCognitoIdentityProvider.getIdentityId(AWSAbstractCognitoIdentityProvider.java:172) E/认知CachingCredentialal.Provider: com.amazonaws.auth.AWSEnhancedCognitoIdentityProvider.refresh(AWSEnhancedCognitoIdentityProvider.java:76) E/认知CognitoCachingCredentialsProvider: at com.amazonaws.auth.CognitoCredentialsProvider.startSession(CognitoCredentialsProvider.java:561) E/CognitoCachingCredentialsProvider: at com.amazonaws.auth.CognitoCredentialsProvider.getCredentials(CognitoCredentialsProvider.java:371) E/CognitoCachingCredentialsProvider:提供: com.amazonaws.auth.CognitoCachingCredentialsProvider.getCredentials(CognitoCachingCredentialsProvider.java:441) E/认知CognitoCachingCredentialsProvider: com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:4168) E/认知CognitoCachingCredentialsProvider: com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.getItem(AmazonDynamoDBClient.java:1232) E/认知CognitoCachingCredentialsProvider: at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.load(DynamoDBMapper.java:393提供: com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.load(DynamoDBMapper.java:466) E/认知CognitoCachingCredentialsProvider: com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.load(DynamoDBMapper.java:340) E/认知CognitoCachingCredentialsProvider: at com.amazonaws.youruserpools.UserActivity$2.doInBackground(UserActivity.java:256) E/认知CognitoCachingCredentialsProvider: at com.amazonaws.youruserpools.UserActivity$2.doInBackground(UserActivity.java:252) E/认知CognitoCachingCredentialsProvider: at android.os.AsyncTask$2。( java.util.concurrent.FutureTask.run(FutureTask.java:237) )E/认知CognitoCachingCredentialsProvider: 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)

EN

回答 2

Stack Overflow用户

发布于 2016-12-01 19:37:55

您所看到的错误表明您试图以未经身份验证的方式访问联邦身份(意味着没有提供身份验证凭据),并且您的标识池不支持未经身份验证的提供程序。

您需要使用用户名和密码对用户进行身份验证,并获得响应的id令牌。这将在要在凭据提供程序上设置的登录映射中使用。

我们有关于用户池与联邦身份的集成的详细文档。请让我们知道,如果您有任何问题的后续文件。

票数 1
EN

Stack Overflow用户

发布于 2016-12-22 13:06:31

错误说是Unauthenticated access

所以试试这个。转到Federated Identities > Edit Identity Pool

然后单击Create角色,尝试添加未经身份验证的角色。(如果未经身份验证的角色中存在任何角色,请不要更改它)。

在下一页中,单击右下角的“允许”。

如果问题仍然存在,请执行以下任一操作:

  1. 如果您已经使用了移动集线器并对进行了更改,用户登录设置>是否需要用户登录到您的应用程序? make是可选的,然后使用示例代码
  2. 否则,请检查AWSConfiguration文件,该文件存储所有所需的id (标识池ID、客户端Id),并验证它们是否与您使用的Id匹配。

有关文档和详细信息,请参阅Rachit的评论

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40910848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档