Cognito Identity Pool IdentityId에서 Cognito 사용자 풀 사용자 이름 가져 오기


10

이 사용자 풀이 자격 증명 공급자 인 Cognito 자격 증명 풀을 사용하여 계정 관리에 AWS Congito 사용자 풀을 사용하고 있습니다. 이것을 사용하여 요청을 Lambda에 보내는 API 게이트웨이를 통해 API에 대한 액세스를 제어하고 있습니다. My Lambda는 Micronaut를 사용하여 Java 8로 구현됩니다. 이 모든 것이 잘 작동합니다.

Lambda Principal에서 HttpRequest: 에서 이름을 얻었 습니다 .

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

Cognito identityId의 문자열 이름으로 돌아 오는 내용입니다. 이 같은:

us-east-1 : xxxxe650-53f4-4cba-b553-5dff42bexxxx

실제 사용자 로그인을 기록하거나 필요에 따라 identityId를 로그인으로 변환하는 방법이 적어도 있습니다.

LookupDeveloperIdentity의 API 호출은 이것에 대해 갈 수있는 올바른 방법이 될 것으로 보인다, 그러나 나는 일에 그것을 얻을 수 없어요.

Java 및 AWS Java SDK 2로이 작업을 수행하려고합니다.

  protected String loadUsername( String user ){
    String ret = "unknown:"+user;
    CognitoIdentityClient cognito = CognitoIdentityClient.create();

    LookupDeveloperIdentityRequest request = LookupDeveloperIdentityRequest.builder()
      .identityPoolId( identityPoolId )
      .identityId( user )
      .build();
    LookupDeveloperIdentityResponse response = cognito.lookupDeveloperIdentity( request );
    List<String> identifiers = response.developerUserIdentifierList();
    if( identifiers != null && identifiers.size() > 0 ){
      ret = identifiers.get( 0 );
    }

    return ret;    
  }

예외를 던지다

software.amazon.awssdk.services.cognitoidentity.model.NotAuthorizedException :이 ID에 액세스 할 수 없습니다 (서비스 : CognitoIdentity, 상태 코드 : 400, 요청 ID : 64e36646-612b-4985-91d1-82aca770XXXX)

CLI를 통해이를 시도하면 비슷한 결과가 나타납니다.

AWS 인식-식별자-개발자-식별-식별 ID us-east-1 : xxxxe650-53f4-4cba-b553-5dff42bexxxx-식품 풀 ID us-east-1 : xxxx0aa1-89f9-4418-be04- 7e83c838xxxx-최대 결과 = 10

LookupDeveloperIdentity 작업을 호출 할 때 오류 (NotAuthorizedException)가 발생했습니다.이 ID에 액세스 할 수 없습니다

적절한 IAM 정책이이를 처리 할 수 ​​있는지 확인했으며이 정책이없는 역할로 시도하면 다른 오류가 발생합니다.

    {
        "Effect": "Allow",
        "Action": [
            "cognito-identity:LookupDeveloperIdentity"
        ],
        "Resource": [
            "arn:aws:cognito-identity:us-east-1:##########:identitypool/us-east-1:xxxx0aa1-89f9-4418-be04-7e83c838xxxx"
        ]
    }

따라서 질문은 다음과 같이 요약됩니다.

  • 이것이 자격 증명 풀 ID에서 사용자 풀 사용자 이름을 얻는 가장 좋은 방법입니까?
    • 그렇다면-내가 뭘 잘못하고 있습니까?
    • 그렇지 않은 경우-더 좋은 방법은 무엇입니까?

대량 작업에 권장되는 docs.aws.amazon.com/cognitoidentity/latest/APIReference/… 를 사용해보십시오 . Are you sure you are using the credentials from the account which owns the identity pool you are requesting lookupDeveloperIdentity for?- forums.aws.amazon.com/thread.jspa?threadID=231354은 나에게는이 사용자 권한이 아닌 IAM 역할 문제처럼 보인다.
Jan Garaj

나는 그것을 시도했지만 같은 오류 메시지가 나타납니다. 자격 증명 풀을 소유 한 계정의 자격 증명을 사용하고 있다고 확신합니다. 풀의 다른 작업은 정상적으로 작동합니다. 그것은 사용자 권한 인 것 같습니다 ... 이상한 ...하지만 그렇다면 서버에 대한 사용자 권한을 얻는 방법을 알고 싶습니다.
죄수

답변:


6

대체 접근법

사용자의 사용자 풀 사용자 ID를 검색하기 위해 람다에서 검색 할 수 있습니다.

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_aaaaaaaaa는 사용자 풀 ID이고 qqqqqqqq-1111-2222-3333-rrrrrrrrrrrr는 사용자 풀 사용자 ID입니다. 그런 다음 문자열을 분할하고 사용자 ID를 추출 할 수 있습니다.

이 정보는 사용중인 인증 공급자에 따라 다릅니다.

그런 다음 사용자 ID 대신 사용자 이름이 필요한 경우 해당 특정 사용자 ID에 대한 적절한 세부 정보를 가져와 사용자 풀에서 직접 사용자 이름을 추출 할 수 있습니다.

참고

https://serverless-stack.com/chapters/mapping-cognito-identity-id-and-user-pool-id.html


받아 들여 (늦게, 그러나 당신은 보너스 담당자를 받아 기쁘다), 그 페이지의 문서조차도 "아래 프로세스가 문서화되어 있지 않은 동안" 이라고 말한다. 이것을하기위한 실제 문서화 된 방법이 있었으면 좋겠다.
죄수
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.