Amazon web services 从cognito标识池identityId获取cognito用户池用户名
我正在使用AWS Congito用户池进行帐户管理,其中Cognoto标识池将此用户池作为标识提供者。我用它来控制通过API网关对API的访问,API网关向Lambda发送请求。我的Lambda是使用Micronaut用Java8实现的。所有这些都很好 在Lambda中,我从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
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