

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

# AWS SDKs에서 인증 방법 관리
<a name="authentication-flows-selection-sdk"></a>

Amazon Cognito 사용자 풀의 사용자는 다양한 초기 로그인 옵션 또는 *요인*으로 로그인할 수 있습니다. 일부 요소의 경우 사용자는 다중 인증(MFA)으로 후속 조치를 취할 수 있습니다. 이러한 첫 번째 요인에는 사용자 이름과 암호, 일회용 암호, 패스키 및 사용자 지정 인증이 포함됩니다. 자세한 내용은 [인증 흐름](amazon-cognito-user-pools-authentication-flow-methods.md) 단원을 참조하십시오. 애플리케이션에 기본 제공 UI 구성 요소가 있고 AWS SDK 모듈을 가져오는 경우 인증을 위한 애플리케이션 로직을 구축해야 합니다. 두 가지 기본 방법 중 하나를 선택해야 하며, 해당 방법에서 구현하려는 인증 메커니즘을 선택해야 합니다.

애플리케이션 또는 클라이언트가 인증 유형을 미리 선언하는 *클라이언트 기반 인증*을 구현할 수 있습니다. 다른 옵션은 앱이 사용자 이름을 수집하고 사용자에게 사용 가능한 인증 유형을 요청하는 *선택 기반 인증*입니다. 요구 사항에 따라 동일한 애플리케이션에서 이러한 모델을 함께 구현하거나 앱 클라이언트 간에 분할할 수 있습니다. 각 메서드에는 클라이언트 기반 사용자 지정 인증 및 선택 기반 암호 없는 인증과 같이 고유한 기능이 있습니다.

사용자 풀 API의 AWS SDK 구현으로 인증을 수행하는 사용자 지정 빌드 애플리케이션에서는 사용자 풀 구성, 앱 클라이언트 구성 및 클라이언트 측 기본 설정에 맞게 API 요청을 구성해야 합니다. `USER_AUTH`의 `AuthFlow`로 시작하는 `InitiateAuth` 세션은 선택 기반 인증을 시작합니다. Amazon Cognito는 선호하는 인증 방법 또는 선택 목록의 문제로 API에 응답합니다. `CUSTOM_AUTH`의 `AuthFlow`로 시작하는 세션은 Lambda 트리거를 사용한 사용자 지정 인증으로 바로 전환됩니다.

일부 인증 방법은 두 흐름 유형 중 하나로 고정되며, 일부 방법은 둘 다에서 사용할 수 있습니다.

**Topics**
+ [선택 기반 인증](#authentication-flows-selection-choice)
+ [클라이언트 기반 인증](#authentication-flows-selection-client)

## 선택 기반 인증
<a name="authentication-flows-selection-choice"></a>

애플리케이션은 선택 기반 인증에서 다음 인증 방법을 요청할 수 있습니다. [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-request-AuthParameters) 또는 [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#CognitoUserPools-AdminInitiateAuth-request-AuthParameters)의 `PREFERRED_CHALLENGE` 파라미터 또는 [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html#CognitoUserPools-RespondToAuthChallenge-request-ChallengeName) 또는 [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html#CognitoUserPools-AdminRespondToAuthChallenge-request-ChallengeName)의 `ChallengeName` 파라미터에서 이러한 옵션을 선언합니다.

1. `EMAIL_OTP` 및 `SMS_OTP`

   [일회용 암호를 통한 암호 없는 로그인](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless)

1. `WEB_AUTHN`

   [WebAuthn 패스키를 사용한 암호 없는 로그인](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passkey)

1. `PASSWORD`

   [영구 암호로 로그인](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-password)

   [영구 암호 및 보안 페이로드로 로그인](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-srp)

   [로그인 후 MFA](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-mfa)

API 컨텍스트에서 이러한 옵션을 검토하려면 [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html#CognitoUserPools-RespondToAuthChallenge-request-ChallengeName)의 `ChallengeName` 섹션을 참조하세요.

선택 기반 로그인은 초기 요청에 대한 응답으로 문제를 실행합니다. 이 문제는 요청된 옵션을 사용할 수 있는지 확인하거나 사용 가능한 선택 사항 목록을 제공합니다. 애플리케이션은 이러한 선택 사항을 사용자에게 표시한 다음 선호하는 로그인 방법에 대한 자격 증명을 입력하고 문제 응답에서 인증을 진행할 수 있습니다.

인증 흐름에는 다음과 같은 선택 기반 옵션이 있습니다. 이 유형의 모든 요청은 앱이 먼저 사용자 이름을 수집하거나 캐시에서 검색해야 합니다.

1. `AuthParameters`의 `USERNAME`만 있는 요청 옵션. Amazon Cognito는 `SELECT_CHALLENGE` 문제를 반환합니다. 여기에서 애플리케이션은 사용자에게 문제를 선택하고 이 응답을 사용자 풀에 반환하라는 메시지를 표시할 수 있습니다.

1. `PREFERRED_CHALLENGE`의 `AuthParameters`와 원하는 문제의 파라미터를 사용하여 원하는 문제를 요청합니다. 예를 들어 `PASSWORD_SRP`의 `PREFERRED_CHALLENGE`를 요청하는 경우 `SRP_A`도 포함해야 합니다. 사용자, 사용자 풀, 앱 클라이언트가 모두 선호하는 문제에 대해 구성된 경우 Amazon Cognito는 해당 문제의 다음 단계로 응답합니다. 예를 들어 `PASSWORD_SRP` 흐름에서는 `PASSWORD_VERIFIER`, `EMAIL_OTP` 및 `SMS_OTP` 흐름에서는 [CodeDeliveryDetails](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CodeDeliveryDetailsType.html)로 응답합니다. 선호하는 문제를 사용할 수 없는 경우 Amazon Cognito는 `SELECT_CHALLENGE` 및 사용 가능한 문제 목록으로 응답합니다.

1. 먼저 사용자를 로그인한 다음 선택 기반 인증 옵션을 요청합니다. 로그인한 사용자의 액세스 토큰이 포함된 [GetUserAuthFactors](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAuthFactors.html) 요청은 사용 가능한 선택 기반 인증 요소와 MFA 설정을 반환합니다. 이 옵션을 사용하면 사용자는 먼저 사용자 이름과 암호로 로그인한 다음 다른 형태의 인증을 활성화할 수 있습니다. 이 작업을 사용하여 선호하는 문제로 로그인한 사용자의 추가 옵션을 확인할 수도 있습니다.

선택 기반 인증을 위해 [앱 클라이언트를 구성](authentication.md#authentication-implement)하려면 허용된 인증 흐름에 `ALLOW_USER_AUTH`를 추가합니다. 또한 사용자 풀 구성에서 허용할 선택 기반 요소를 선택해야 합니다. 다음 프로세스는 선택 기반 인증 요소를 선택하는 방법을 보여줍니다.

------
#### [ Amazon Cognito console ]

**사용자 풀에서 선택 기반 인증 옵션을 구성하려면**

1. 에 로그인 AWS 하고 [Amazon Cognito 사용자 풀 콘솔](https://console.aws.amazon.com/cognito/v2/idp)로 이동합니다. 사용자 풀을 선택하거나 새로운 사용자 풀을 생성합니다.

1. 사용자 풀 구성에서 **로그인** 메뉴를 선택합니다. **선택 기반 로그인 옵션**을 찾아 **편집**을 선택합니다.

1. **암호** 옵션은 항상 사용할 수 있습니다. 여기에는 `PASSWORD` 및 `PASSWORD_SRP` 흐름이 포함됩니다. 사용자의 옵션에 추가할 **추가 옵션**을 선택합니다. `WEB_AUTHN`용 **패스키**, `EMAIL_OTP`용 **이메일 메시지 일회용 암호**, `SMS_OTP`용 **SMS 메시지 일회용 암호**를 추가할 수 있습니다.

1. **변경 사항 저장**을 선택합니다.

------
#### [ API/SDK ]

다음 부분 [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) 또는 [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) 요청 본문은 선택 기반 인증에 사용할 수 있는 모든 옵션을 구성합니다.

```
"Policies": {
    "SignInPolicy": {
        "AllowedFirstAuthFactors": [
            "PASSWORD",
            "WEB_AUTHN",
            "EMAIL_OTP",
            "SMS_OTP"
        ]
    }
},
```

------

## 클라이언트 기반 인증
<a name="authentication-flows-selection-client"></a>

클라이언트 기반 인증은 다음 인증 흐름을 지원합니다. [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-request-AuthFlow) 또는 [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#CognitoUserPools-AdminInitiateAuth-request-AuthFlow)의 `AuthFlow` 파라미터에서 이러한 옵션을 선언합니다.

1. `USER_PASSWORD_AUTH` 및 `ADMIN_USER_PASSWORD_AUTH`

   [영구 암호로 로그인](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-password)

   [로그인 후 MFA](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-mfa)

   이 인증 흐름은 선택 기반 인증의 `PASSWORD`와 동일합니다.

1. `USER_SRP_AUTH`

   [영구 암호 및 보안 페이로드로 로그인](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-srp)

   [로그인 후 MFA](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-mfa)

   이 인증 흐름은 선택 기반 인증의 `PASSWORD_SRP`와 동일합니다.

1. `REFRESH_TOKEN_AUTH`

   [새로 고침 토큰](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-refresh)

   이 인증 흐름은 클라이언트 기반 인증에서만 사용할 수 있습니다.

1. `CUSTOM_AUTH`

   [사용자 지정 인증](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-custom)

   이 인증 흐름은 클라이언트 기반 인증에서만 사용할 수 있습니다.

클라이언트 기반 인증을 사용하면 Amazon Cognito는 사용자가 인증 흐름을 시작하기 전에 인증할 방법을 결정했다고 가정합니다. 사용자가 제공하려는 로그인 팩터를 결정하는 로직은 기본 설정 또는 사용자 지정 프롬프트로 결정한 다음 사용자 풀에 대한 첫 번째 요청에서 선언해야 합니다. `InitiateAuth` 요청은 `USER_SRP_AUTH`와 같이 나열된 옵션 중 하나에 직접 해당하는 로그인 `AuthFlow`를 선언합니다. 이 선언을 사용하면 요청에 `USERNAME`, `SECRET_HASH` 및 `SRP_A`와 같이 인증을 시작하는 파라미터도 포함됩니다. Amazon Cognito는 SRP의 경우 `PASSWORD_VERIFIER`, TOTP MFA를 사용한 암호 로그인의 경우 `SOFTWARE_TOKEN_MFA`와 같은 추가적인 문제로 이 요청에 응답할 수 있습니다.

클라이언트 기반 인증을 위해 [앱 클라이언트를 구성](authentication.md#authentication-implement)하려면 허용된 인증 흐름에 `ALLOW_USER_AUTH` 이외의 모든 인증 흐름을 추가합니다. 예: `ALLOW_USER_PASSWORD_AUTH`, `ALLOW_CUSTOM_AUTH`, `ALLOW_REFRESH_TOKEN_AUTH`. 클라이언트 기반 인증 흐름을 허용하려면 추가 사용자 풀 구성이 필요하지 않습니다.