2

새로운 AmazonCognitoIdentityClient를 초기화하는 두 가지 방법의 차이점은 무엇입니까?BasicAWSCredentials 대 CognitoAWSCredentials를 통해 amazon aws cognito 클라이언트를 초기화하십시오.

AmazonCognitoIdentity identityClient = new AmazonCognitoIdentityClient(
    new BasicAWSCredentials("access_key_id", "secret_access_key") 
); 
identityClient.GetOpenIdTokenForDeveloperIdentity() 

- 모두 BasicAWSCredentials뿐만 아니라 CognitoAWSCredentials 있습니다 - 인터넷 쇼 BasicAWSCredentials 대부분의 예는 CognitoIdentityClient를 인스턴스화하는 데 사용되는,하지만 문서의 방법 서명이 AWSCredentials 클래스는 받아들이라고하지만

AmazonCognitoIdentity identityClient = new AmazonCognitoIdentityClient(
    new CognitoAWSCredentials ("IDENTITY_POOL_ID", "REGION_NAME"); 
); 
identityClient.GetOpenIdTokenForDeveloperIdentity() 

AWSCredentials 클래스의 하위 클래스 그러므로 나는 둘 다 정상적으로 일해야한다고 추측한다. ,

  • 권한,
  • 시간 제한
  • 등 :

    나는 다음과 같은 차이가 영향을 방법을 이해하려고? cognitoIdentityClient 생성자에 대한

API 참조는 여기에 있습니다 : http://docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page=CognitoIdentity/TCognitoIdentityCognitoIdentityClient.html&tocid=Amazon_CognitoIdentity_AmazonCognitoIdentityClient

답변

2

는 클라이언트 장치에서 당신은 CognitoAWSCredentials를 사용 AmazonCognitoIdentityClient 클라이언트를 인스턴스화해야합니다. AWS 클라이언트는 STS 서비스를 사용하여 클라이언트가 이전에 ID 풀에서 정의한 역할을 맡을 수있는 임시 자격 증명을 가져옵니다. 일반적으로이 역할은 AWS 리소스에 대한 액세스가 매우 제한적입니다. (S3 버킷에 특정 버킷 등 업로드) 이것은 음악 시스템을 켜기 만 할 수있는 특별한 유형의 자동차 키를 사람들에게 제공하는 것과 같습니다. 엔진이 아닙니다.

반면에 GetOpenIdTokenForDeveloperIdentity은 개발자 자격 증명이 필요한 특수 API 호출입니다. 개발자 자격 증명을 클라이언트 장치에 배포하면 안되며 서버에만 보관해야합니다. 서버에서 개발자 자격 증명을 사용하여 AmazonCognitoIdentityClient을 인스턴스화하면 클라이언트가 해당 ID ID 또는 새 ID를 만들 때 OpenId 토큰을 얻을 수 있도록 REST 끝점을 노출 할 수 있습니다. 사용자가 사용자 이름과 비밀번호를 사용하여 API에 로그인하고 데이터베이스에 저장된 맞춤 액세스 토큰을 반환한다고 가정 해 봅시다. 후 엔드 포인트는이 논리를 구현할 수 :

  1. 는 사용자가 (사용자 ID, 사용자 이름, 전자 메일 등)
  2. 사용 LookupDeveloperIdentity을 사용자 정의 토큰을 사용하기위한 고유 식별자를 가져옵니다 주어진 이름에 대한 identityId을 찾기 .
  3. 발견 된 ID가있는 GetOpenIdTokenForDeveloperIdentity을 사용하고 클라이언트에게 다시 보냅니다. 그래서 그들은 그 identityId에 "로그인"할 수 있습니다.
  4. 이 사용자는 사용자 이름에 ID를 할당하지 않은 경우 새 사용자를 만들고 다시 보내십시오.

개발자가 알듯이 AWS 토큰은 두 가지 중요한 API 호출을 가능하게합니다. 이제 클라이언트가 개발자 액세스 토큰을 가지고 있으므로 GetOpenIdTokenForDeveloperIdentity 호출에 액세스 할 수 있다고 가정합니다. 그런 다음 OpenId 토큰을 생성하고 다른 사람의 ID로 쉽게 전환하고 개인 데이터에 액세스 할 수 있습니다.

개발자 인증 ID (https://docs.aws.amazon.com/cognito/latest/developerguide/developer-authenticated-identities.html)를 사용하지 않으면 GetOpenIdTokenForDeveloperIdentity 메커니즘이 필요하지 않습니다. 공개 인증 방법 (Twitter, Facebook 등) 만 사용하는 경우) 두 번째 단락을 무시하고 CognitoAWSCredentials을 사용해야합니다.

+0

이 줄에 대해 자세히 설명해 주시겠습니까? *** "이 끝점은 사용자 지정 ID 토큰을 수락하고 유효성을 검사하고 클라이언트에 OpenId 토큰을 다시 보냅니다."*** REST 끝점에서 사용자 지정 IdentityToken 또는 사용자 지정 IdentityID를 수락한다는 것을 의미합니까? 이 시나리오에서는 OpenIDToken 또는 IdentityID 중 하나를 사용합니다. 어느 것이 REST 엔드 포인트에 대한 입력이어야한다는 것을 의미합니까? –

+1

내 대답을 편집했습니다. 나는이 Cognito가 진짜 두통이기 때문에 내가 얼마나 잘 설명 할 수 있는지 모른다. 우리에게는 또한 매우 복잡했으며 이해하는 데 시간이 걸렸습니다. 쉬운 서비스가 아닙니다. –

+0

편집 해 주셔서 감사합니다. 그렇습니다. 아주 까다 롭습니다. 당신이 그것에 대해 알고있을 수도 있기 때문에 다른 질문을하십시오. 'GetOpenIdTokenForDeveloperIdentity'는 IdentityId와 OpenIDToken을 반환합니다. OpenIDToken은 어쨌든 어디에 사용됩니까? 연합 인증 인증 흐름에서 내 다음 호출은 GetCredentialsForIdentity()입니다. 여기에있는 문서 (http://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html의 문서에 따르면)에는 'IdentityId'만 필요합니다. - GetOpenIdTokenForDeveloperIdentity에 의해 반환 된 OpenIdToken은 필요 없다. 우리는 그것을 위해 무엇을 필요로 하는가? –

0

Çaatay의 대답에서 설명한대로 BasicAwsCredentials는 개발자 자격 증명으로 인스턴스화됩니다. 각 생성자를 사용할시기에 대해 설명한 것은 개발자 인증 ID 이외의 모든 경우에서 절대적으로 맞습니다.

이 코드는 백엔드 서비스에 배포되므로 노출이 덜 우려됩니다. 모바일 클라이언트는이 서버와 통신하여 자격 증명을 얻을 토큰을 가져옵니다. 자격 증명은이 패턴으로 사용자에게 노출되지 않습니다.

Cognito documentation에서 볼 수있는 것처럼 샘플에는 BasicAwsCredentials가 있습니다. 엔드 투 엔드 샘플은 this blog post에 표시됩니다.