无法在Java中的AWS Cognito用户池中列出用户详细信息

时间:2018-09-24 22:33:15

标签: amazon-web-services aws-sdk amazon-cognito

我在aws cognito中有一个用户池,其中包含大约100个用户详细信息。我想通过java代码列出所有用户的电子邮件。下面是代码-

      AWSCognitoIdentityProvider cognitoIdentityProvider = AWSCognitoIdentityProviderClientBuilder
            .standard()
            .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
            .withRegion(Regions.fromName(REGION))
            .build();
    try {
    ListUsersRequest req=new ListUsersRequest();
        req=req.withUserPoolId(POOL_ID);

    List<String> attributesToGet=new ArrayList<>();
    attributesToGet.add("email");
        ListUsersResult response = cognitoIdentityProvider.listUsers(req);
    System.out.println(response.getUsers());

但是,当我运行代码时,出现异常- com.amazonaws.services.cognitoidp.model.AWSCognitoIdentityProviderException:缺少身份验证令牌(服务:AWSCognitoIdentityProvider;状态代码:400;错误代码:MissingAuthenticationTokenException。 该如何解决?还是有其他方法可以打印所有用户?

3 个答案:

答案 0 :(得分:0)

我将验证传递到AWSStaticCredentialsProvider的凭证是否有效。否则代码看起来正确-我的一个项目中有类似的代码,可以正常工作。

FYI-listUsers一次仅返回60个结果。您需要从响应中获取paginationToken,将其添加到后续请求中,然后在循环中再次调用listUsers以检索所有用户

答案 1 :(得分:0)

正常运行,需要添加以下代码行-

    AWSCredentials awsCreds = new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY);

此外,还需要为他们的aws帐户明确生成aws访问密钥和秘密密钥。

答案 2 :(得分:0)

@bwinant然后我用下面的代码替换了我的代码,它解决了这个问题。

for (;;) {
    result = identityUserPoolProviderClient.listUsers(listUsersRequest);
    System.out.println("Iteration:- " + count + " of " +   
        result.getUsers().size() + " for PaginationToken:- " + 
        result.getPaginationToken());
    System.out.println(result.getUsers().size());
    userTypeList.addAll(result.getUsers());
    for (int i = result.getUsers().size(); i > 0; i--) {
        userTypeList.addAll((Collection<? extends UserType>)  result.getUsers());
    }

    paginationToken = result.getPaginationToken();
    if (paginationToken == null) {
        break;
    }
    listUsersRequest.setPaginationToken(paginationToken);

    count++;
}