Amazon Cognito 사용자 풀과 함께 권한 부여 코드 부여에 PKCE 사용 - Amazon Cognito

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon Cognito 사용자 풀과 함께 권한 부여 코드 부여에 PKCE 사용

Amazon Cognito는 인증 코드 부여에서 코드 교환을 위한 증명 키 (PKCE) 인증을 지원합니다. PKCE는 퍼블릭 클라이언트를 위한 OAuth 2.0 인증 코드 부여의 확장입니다. PKCE는 도용된 인증 코드의 상환을 방지합니다.

아마존 코그니토가 PKCE를 사용하는 방법

PKCE 인증을 시작하려면 애플리케이션에서 고유한 문자열 값을 생성해야 합니다. 이 문자열은 Amazon Cognito가 초기 권한 부여를 요청하는 클라이언트와 인증 코드를 토큰으로 교환하는 클라이언트를 비교하는 데 사용하는 비밀 값인 코드 검증자입니다.

앱은 코드 검증 문자열에 SHA256 해시를 적용하고 결과를 base64로 인코딩해야 합니다. 해시된 문자열을 요청 본문의 권한 부여 엔드포인트 code_challenge as매개변수로 전달하십시오. 앱이 인증 코드를 토큰으로 교환할 때는 요청 본문의 code_verifier 매개 변수로 코드 검증자 문자열을 일반 텍스트로 포함해야 합니다. Token 엔드포인트 Amazon Cognito는 코드 검증 도구에서 동일한 hash-and-encode 작업을 수행합니다. Amazon Cognito는 코드 검증자가 승인 요청에서 수신한 것과 동일한 코드 챌린지로 이어진다고 판단하는 경우에만 ID, 액세스 및 새로 고침 토큰을 반환합니다.

PKCE를 사용하여 권한 부여 흐름을 구현하려면
  1. Amazon Cognito 콘솔을 엽니다. 메시지가 표시되면 자격 증명을 입력합니다. AWS

  2. [사용자 풀(User Pools)]을 선택합니다.

  3. 목록에서 기존 사용자 풀을 선택하거나 사용자 풀을 생성합니다. 사용자 풀을 생성하는 경우 마법사 실행 중에 앱 클라이언트를 설정하고 호스팅된 UI를 구성하라는 메시지가 표시됩니다.

    1. 새 사용자 풀을 생성하는 경우 설정 안내에 따라 앱 클라이언트를 설정하고 호스팅된 UI를 구성하십시오.

    2. 기존 사용자 풀을 구성하는 경우 아직 추가하지 않았다면 도메인과 공용 앱 클라이언트를 추가하세요.

  4. PKCE에 대한 코드 챌린지를 생성하려면 일반적으로 범용 고유 식별자 (UUID) 인 임의의 영숫자 문자열을 생성하십시오. 이 문자열은 요청 시 제출할 code_verifier 매개 변수의 값입니다. Token 엔드포인트

  5. SHA256 알고리즘으로 code_verifier 문자열을 해시합니다. 해싱 작업의 결과를 base64로 인코딩합니다. 이 문자열은 요청 시 에 제출할 code_challenge 매개 변수의 값입니다. 권한 부여 엔드포인트

    다음 Python 예제에서는 a를 code_verifier 생성하고 다음을 계산합니다. code_challenge

    #!/usr/bin/env python3 import random from base64 import urlsafe_b64encode from hashlib import sha256 from string import ascii_letters from string import digits # use a cryptographically strong random number generator source rand = random.SystemRandom() code_verifier = ''.join(rand.choices(ascii_letters + digits, k=128)) code_verifier_hash = sha256(code_verifier.encode()).digest() code_challenge = urlsafe_b64encode(code_verifier_hash).decode().rstrip('=') print(f"code challenge: {code_challenge}") print(f"code verifier: {code_verifier}")

    다음은 Python 스크립트의 예제 출력입니다.

    code challenge: Eh0mg-OZv7BAyo-tdv_vYamx1boOYDulDklyXoMDtLg code verifier: 9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBk-JWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH
  6. PKCE를 통한 인증 코드 부여 요청으로 호스팅된 UI 로그인을 완료하십시오. 다음은 예제 URL입니다.

    https://mydomain.us-east-1.amazoncognito.com/oauth2/authorize?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com&code_challenge=Eh0mg-OZv7BAyo-tdv_vYamx1boOYDulDklyXoMDtLg&code_challenge_method=S256
  7. 승인을 code 수집하여 토큰 엔드포인트가 있는 토큰으로 교환하십시오. 다음은 요청 예제입니다.

    POST /oauth2/token HTTP/1.1 Host: mydomain.us-east-1.amazoncognito.com Content-Type: application/x-www-form-urlencoded Content-Length: 296 redirect_uri=https%3A%2F%2Fwww.example.com& client_id=1example23456789& code=7378f445-c87f-400c-855e-0297d072ff03& grant_type=authorization_code& code_verifier=9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBk-JWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH
  8. 응답을 검토하세요. 여기에는 ID, 액세스 및 새로 고침 토큰이 포함됩니다. Amazon Cognito 사용자 풀 토큰 사용에 대한 자세한 내용은 을 참조하십시오. 사용자 풀에 토큰 사용