View a markdown version of this page

Amazon Cognito 사용자 풀로 인증 - Amazon Cognito

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

Amazon Cognito 사용자 풀로 인증

Amazon Cognito에서는 다양한 방법으로 사용자를 인증할 수 있습니다. 사용자는 암호와 WebAuthn 패스키로 로그인할 수 있습니다. Amazon Cognito는 이메일 또는 SMS 메시지로 일회용 암호를 보낼 수 있습니다. 자체 문제 및 응답 시퀀스를 오케스트레이션하는 Lambda 함수를 구현할 수 있습니다. 다음은 인증 흐름입니다. 인증 흐름에서 사용자는 보안 암호를 제공하고 Amazon Cognito는 보안 암호를 확인한 다음 애플리케이션이 OIDC 라이브러리로 처리할 수 있도록 JSON 웹 토큰(JWT)을 발급합니다. 이 장에서는 다양한 애플리케이션 환경에서 다양한 인증 흐름에 맞게 사용자 풀 및 앱 클라이언트를 구성하는 방법을 설명합니다. 관리형 로그인의 호스팅 로그인 페이지를 사용하고 AWS SDK에서 자체 로직 및 프런트 엔드를 빌드하는 옵션을 다룹니다.

도메인 유무에 관계없이 모든 사용자 풀은 사용자 풀 API에서 사용자를 인증할 수 있습니다. 사용자 풀에 도메인을 추가하면 사용자 풀 엔드포인트를 사용할 수 있습니다. 사용자 풀 API는 다양한 권한 부여 모델 및 API 요청의 요청 흐름을 지원합니다.

Amazon Cognito는 사용자의 ID를 확인하기 위해 이메일, SMS 메시지, 일회용 암호 및 패스키와 같은 암호 외에도 여러 유형의 문제를 통합하는 인증 흐름을 지원합니다.

세부 정보를 구성하기 전에 애플리케이션에 맞는 인증 접근 방식을 선택합니다. 다음 결정 도우미는 두 개의 진입점과 사용자 지정 빌드 애플리케이션 내에서 두 개의 초기 로그인 흐름을 요약합니다. 각 옵션은 세부 섹션으로 연결됩니다.

Amazon Cognito에서 로그인 페이지를 호스팅하거나 자체 프런트 엔드를 빌드하도록 하시겠습니까?

가장 낮은 경로를 원하는 경우 관리형 로그인을 사용합니다. Amazon Cognito는 로그인, 로그아웃 및 암호 재설정 페이지를 호스팅하고 애플리케이션은 OpenID Connect(OIDC) 신뢰 당사자 라이브러리를 사용하여 결과를 처리합니다. 관리형 로그인은 사용자 풀 및 앱 클라이언트 구성에서 허용하는 인증 방법을 자동으로 제공합니다.

자체 UI를 빌드하고 로그인 로직을 제어하려면 AWS SDK를 사용합니다. 애플리케이션에서 사용자 풀 API를 직접 호출하고 챌린지-응답 로직을 구현합니다.

사용자 지정 빌드 애플리케이션에서 사용자로부터 로그인 방법을 수집하나요, 아니면 미리 선언하나요?

사용자에게 사용 가능한 로그인 방법 목록을 제공하고 선택하도록 하려면 선택 기반 인증(USER_AUTH흐름)을 선택합니다. 이 흐름은 암호 없는 패스키 로그인을 제공하는 유일한 방법입니다.

애플리케이션이 사용자가 로그인하고와 같이 미리 흐름을 선언하는 방법을 이미 알고 있는 경우 클라이언트 기반 인증을 선택합니다USER_SRP_AUTH. 클라이언트 기반 인증은 사용자 지정 인증 및 새로 고침 토큰 흐름을 사용하는 유일한 방법입니다.

선택 기반 인증을 위한 사전 조건

선택 기반 인증은 관리형 로그인과 AWS SDKs 모두에 적용됩니다. 이를 사용하려면 앱 클라이언트의 허용된 인증 흐름ALLOW_USER_AUTH에를 추가합니다. 암호 없는 및 패스키 메서드에는 관리형 로그인 도메인과 Lite 티어(Essentials 또는 Plus) 이상의 기능 계획이 추가로 필요합니다.

인증 세션의 예

다음 다이어그램과 단계별 가이드는 사용자가 애플리케이션에 로그인하는 일반적인 시나리오를 보여줍니다. 예시 애플리케이션은 사용자에게 몇 가지 로그인 옵션을 제공합니다. 자격 증명을 입력하여 하나를 선택하고, 추가 인증 요소를 제공하고, 로그인합니다.

사용자에게 입력을 요청하고 AWS SDK로 로그인하는 애플리케이션을 보여주는 흐름도입니다.

사용자가 사용자 이름과 암호로 로그인하거나, 이메일 메시지에서 일회용 코드를 요청하거나, 지문 옵션을 선택할 수 있는 로그인 페이지가 있는 애플리케이션을 가정해 보겠습니다.

  1. 로그인 프롬프트: 애플리케이션에 로그인 버튼이 있는 홈 화면이 표시됩니다.

  2. 로그인 요청: 사용자가 로그인을 선택합니다. 쿠키 또는 캐시에서 애플리케이션은 사용자 이름을 검색하거나 입력하라는 메시지를 표시합니다.

  3. 요청 옵션: 애플리케이션에서 USER_AUTH 흐름이 포함된 InitiateAuth API 요청으로 사용자의 로그인 옵션을 요청하여 사용자에게 사용 가능한 로그인 방법을 요청합니다.

  4. 로그인 옵션 전송: Amazon Cognito는 PASSWORD, EMAIL_OTP 및 WEB_AUTHN으로 응답합니다. 응답에는 다음 응답에서 재생할 수 있는 세션 식별자가 포함되어 있습니다.

  5. 표시 옵션: 애플리케이션에 사용자가 사용자 이름과 암호를 입력하거나, 일회용 코드를 가져오거나, 지문을 스캔할 수 있는 UI 요소가 표시됩니다.

  6. 옵션/자격 증명 입력 선택: 사용자가 사용자 이름과 암호를 입력합니다.

  7. 인증 시작: 애플리케이션에서 사용자 이름-암호 로그인을 확인하고 사용자 이름과 암호를 제공하는 RespondToAuthChallenge API 요청과 함께 사용자의 로그인 정보를 제공합니다.

  8. 자격 증명 검증: Amazon Cognito가 사용자의 자격 증명을 확인합니다.

  9. 추가 문제: 사용자에게 인증 앱으로 구성된 다중 인증이 있습니다. Amazon Cognito는 SOFTWARE_TOKEN_MFA 문제를 반환합니다.

  10. 문제 프롬프트: 애플리케이션에 사용자의 인증 앱에서 시간 기반 일회용 암호(TOTP)를 요청하는 양식이 표시됩니다.

  11. 문제 답변: 사용자가 TOTP를 제출합니다.

  12. 문제에 응답: 다른 RespondToAuthChallenge 요청에서 애플리케이션은 사용자의 TOTP를 제공합니다.

  13. 문제 응답 검증: Amazon Cognito는 사용자의 코드를 확인하고 현재 사용자에게 추가 문제를 발행하지 않도록 사용자 풀이 구성되어 있는지 확인합니다.

  14. 문제 토큰: Amazon Cognito는 ID, 액세스 및 새로 고침 JSON 웹 토큰(JWT)을 반환합니다. 사용자의 초기 인증이 완료되었습니다.

  15. 토큰 저장: 애플리케이션은 사용자 데이터를 참조하고, 리소스에 대한 액세스를 승인하고, 토큰이 만료되면 토큰을 업데이트할 수 있도록 사용자의 토큰을 캐싱합니다.

  16. 승인된 콘텐츠 렌더링: 애플리케이션은 ID 및 역할을 기반으로 리소스에 대한 사용자의 액세스를 결정하고 애플리케이션 콘텐츠를 제공합니다.

  17. 액세스 콘텐츠: 사용자가 로그인하고 애플리케이션 사용을 시작합니다.

  18. 토큰이 만료된 콘텐츠 요청: 나중에 사용자가 권한이 필요한 리소스를 요청합니다. 사용자의 캐시된 토큰이 만료되었습니다.

  19. 새로 고침 토큰: 애플리케이션에서 사용자의 저장된 새로 고침 토큰을 사용하여 InitiateAuth 요청을 만듭니다.

  20. 문제 토큰: Amazon Cognito는 새로운 ID와 액세스 JWT를 반환합니다. 자격 증명에 대한 추가 프롬프트 없이 사용자의 세션이 안전하게 새로 고쳐집니다.

AWS Lambda 트리거를 사용하여 사용자가 인증하는 방식을 사용자 지정할 수 있습니다. 이러한 트리거는 인증 흐름의 일부로서 고유 챌린지를 발행 및 확인할 수 있습니다.

안전한 백엔드 서버에 관리자 인증 흐름을 사용할 수도 있습니다. 사용자 마이그레이션 인증 흐름을 사용하면 사용자가 암호를 재설정할 필요 없이 사용자 마이그레이션을 수행할 수 있습니다.