【问题标题】:Unable to list user details from aws cognito user pool in java无法从 java 中的 aws cognito 用户池中列出用户详细信息
【发布时间】:2019-02-28 11:45:30
【问题描述】:

我在 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。强> 如何解决这个问题或者有没有其他方法可以打印所有用户?

【问题讨论】:

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


    【解决方案1】:

    我会验证传递给 AWSStaticCredentialsProvider 的凭证是否有效。否则代码看起来是正确的 - 我的一个项目中有类似的代码,运行良好。

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

    【讨论】:

    • bwinant,凭据正确,因为其他功能工作正常。但是为了验证,注册我需要设置客户端 id 而不是池 id。但是对于列出和更新用户属性,只有池 id 设置器是可用的。另外,我们是否需要在 aws 帐户中添加任何策略或其他配置来列出和更新用户池数据?
    • 你不需要clientId,只需要poolId来执行listUsers。无论调用什么用户/角色,它都需要 IAM 中的 ListUsers 权限
    • 好的,谢谢,请您提供提供权限所需的行代码。
    【解决方案2】:

    搞定了,需要添加以下代码行-

        AWSCredentials awsCreds = new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY);
    

    另外,需要明确地为其 aws 帐户生成 aws 访问密钥和密钥。

    【讨论】:

      【解决方案3】:

      @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++;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-01
        • 2018-05-18
        • 1970-01-01
        • 2017-12-03
        • 2020-05-27
        • 2017-05-01
        • 1970-01-01
        • 2017-02-10
        相关资源
        最近更新 更多