Amazon web services 从cognito标识池identityId获取cognito用户池用户名

Amazon web services 从cognito标识池identityId获取cognito用户池用户名,amazon-web-services,amazon-cognito,micronaut,aws-java-sdk,micronaut-aws,Amazon Web Services,Amazon Cognito,Micronaut,Aws Java Sdk,Micronaut Aws,我正在使用AWS Congito用户池进行帐户管理,其中Cognoto标识池将此用户池作为标识提供者。我用它来控制通过API网关对API的访问,API网关向Lambda发送请求。我的Lambda是使用Micronaut用Java8实现的。所有这些都很好 在Lambda中,我从HttpRequest中的Principal获取名称: protected String resolveUser( HttpRequest request ){ String ret = null; O

我正在使用AWS Congito用户池进行帐户管理,其中Cognoto标识池将此用户池作为标识提供者。我用它来控制通过API网关对API的访问,API网关向Lambda发送请求。我的Lambda是使用Micronaut用Java8实现的。所有这些都很好

在Lambda中,我从
HttpRequest
中的
Principal
获取名称:

  protected String resolveUser( HttpRequest request ){
    String ret = null;

    Optional<Principal> principal = request.getUserPrincipal();
    if( principal.isPresent() ){
      ret = principal.get().getName();
    }

    if( ret == null || ret.length() == 0 ){
      ret = "unknown";
    }
    return ret;
  }
因此,问题归结为:

  • 这是从标识池id获取用户池用户名的最佳方法吗?
    • 如果是-我做错了什么
    • 如果不是,有什么更好的方法

    • 替代方法

      为了检索用户的用户池用户id,您可以在lambda中检索:

      authProvider = event.requestContext.identity.cognitoAuthenticationProvider;
      
      这将返回一个字符串,该字符串将包括用户的用户池用户ID,它将类似于:

      cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxxx,cognito-idp.us-east-1.amazonaws.com/us-east-1_aaaaaaaaa:CognitoSignIn:qqqqqqqq-1111-2222-3333-rrrrrrrrrrrr
      
      其中us-east-1_uuaaaaaaaaaa是用户池id,qqqqq-1111-2222-3333-rrrrrrrrrrrrr是用户池用户id。然后可以拆分字符串并提取用户id

      请注意,根据您使用的身份验证提供商,这些信息会有所不同。

      然后,如果您需要用户名而不是用户ID,您可以通过获取特定用户ID的适当详细信息,直接从用户池中提取它

      参考文献


      您是否可以尝试推荐的方法进行更高容量的操作
      您确定使用的凭据来自您请求LookupdeveloperEntity的标识池所有者的帐户吗?
      -对我来说,这似乎是用户权限问题,而不是IAM角色问题。我也尝试过,但收到了相同的错误消息。我确信我正在使用来自拥有标识池的帐户的凭据-池上的其他操作可以正常工作。作为一个用户权限似乎。。。古怪的但如果是这样,我想知道如何获得服务器的用户权限。已接受(姗姗来迟,但很高兴你得到了奖金代表),即使页面上的文档说:“虽然下面的过程没有文档记录”,但我希望有一个实际的文档记录方法来做到这一点。
      authProvider = event.requestContext.identity.cognitoAuthenticationProvider;
      
      cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxxx,cognito-idp.us-east-1.amazonaws.com/us-east-1_aaaaaaaaa:CognitoSignIn:qqqqqqqq-1111-2222-3333-rrrrrrrrrrrr