【问题标题】:How do I look up a cognito user by their sub/UUID?如何通过 sub/UUID 查找 cognito 用户?
【发布时间】:2017-09-15 06:04:37
【问题描述】:

我想通过他们的子用户在我的 Cognito 用户池中查找用户,据我所知,这只是他们的 UUID。我想在 Lambda 函数中用 Java 执行此操作,但在 AWS 的文档中找不到如何执行此操作。有什么想法吗?

【问题讨论】:

    标签: java amazon-web-services amazon-cognito


    【解决方案1】:
         // class var
         protected final AWSCognitoIdentityProviderClient identityUserPoolProviderClient;
    
        // initialize the Cognito Provider client.  This is used to talk to the user pool
        identityUserPoolProviderClient = new AWSCognitoIdentityProviderClient(new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY)); 
        identityUserPoolProviderClient.setRegion(RegionUtils.getRegion(USER_POOL_REGION)); 
    
    
        // ...some init code omitted        
    
    // build the request
    AdminGetUserRequest idRequest = new AdminGetUserRequest();
    idRequest.withUserPoolId(USER_POOL_ID);
    idRequest.withUsername(username);
    
    // call cognito for the result
    AdminGetUserResult result = identityUserPoolProviderClient.adminGetUser(idRequest);
    // loop through results 
    
    List<UserType> userTypeList = result.getUsers();
    // loop through them
    for (UserType userType : userTypeList) {
        List<AttributeType> attributeList = userType.getAttributes();
        for (AttributeType attribute : attributeList) {
            String attName = attribute.getName();
            String attValue = attribute.getValue();
            System.out.println(attName + ": " + attValue);
        }
    }
    

    【讨论】:

      【解决方案2】:

      截至今天,这对于 Cognito 用户池来说是不可能的。

      只能使用用户名或别名查找用户。 ListUsers API 还允许通过在某些 standard attributes 上提供搜索过滤器来搜索用户,但 sub 不是其中之一。

      【讨论】:

      【解决方案3】:

      现在可以了。 http://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html

      “sub”在支持的属性列表中。 JavaScript 示例:

      var cog = new AWS.CognitoIdentityServiceProvider();
      
      var filter = "sub = \"" + userSub + "\"";
      var req = {
          "Filter": filter,
          "UserPoolId": "your pool id" // looks like us-east-9_KDFn1cvys
      };
      
      cog.listUsers(req, function(err, data) {
          if (err) {
              console.log(err);
          }
          else {
              if (data.Users.length === 1){ //as far as we search by sub, should be only one user.
                  var user = data.Users[0];
                  var attributes = data.Users[0].Attributes;
              } else {
                  console.log("Something wrong.");
              }
          }
      });
      

      【讨论】:

        【解决方案4】:

        老问题,但是您的 username 参数在 Cognito 的 adminGetUser 方法中被重载。不幸的是,它没有记录在案:adminGetUser SDK

        这是一个sn-p:

        const params = {
          UserPoolId: 'someUserPoolId'
          Username: 'random-string-sub-uuid',
        };
        
        CognitoService.adminGetUser(params,(err, data) => {
          console.log(data);
        })
        
        Returns:
        { Username: 'random-string-sub-uuid',
          UserAttributes:
           [ { Name: 'sub', Value: 'random-string-sub-uuid' },
             { Name: 'custom:attributeName', Value: 'someValue' },
             { Name: 'email_verified', Value: 'false' },
             { Name: 'name', Value: 'nameValue' },
             { Name: 'email', Value: 'user@stackoverflow.com' } ],
          UserCreateDate: 2018-10-12T14:04:04.357Z,
          UserLastModifiedDate: 2018-10-12T14:05:03.843Z,
          Enabled: true,
          UserStatus: 'CONFIRMED' }
        

        【讨论】:

        • 为我提供 sub 作为用户名只是说用户不存在,至少使用 aws CLI
        • @redbmk 如果您的用户池设置为仅用于电子邮件或电话号码登录(在“属性”选项卡上设置),这将适用于您。如果您选择允许多种登录类型和/或首选用户名的其他方法,则在查找用户时必须传入Username 而不是sub
        • 如果您为池配置了身份提供程序,AdminGetUser 似乎也不起作用。我们依靠sub 工作,因为我们要求用户名是电子邮件。这是有效的,因为就像@hvaughan3 说它适用于该池配置。但是,一旦我们设置了 IDP 并让用户进行配置,它就不适用于这些用户。必须切换到ListUsers,并在sub 上使用过滤器。
        猜你喜欢
        • 1970-01-01
        • 2020-07-28
        • 1970-01-01
        • 2020-09-30
        • 2019-10-18
        • 1970-01-01
        • 1970-01-01
        • 2018-02-21
        • 2015-06-08
        相关资源
        最近更新 更多