我在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。
该如何解决?还是有其他方法可以打印所有用户?答案 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++;
}