

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

# 사용자 풀에서 SAML ID 제공업체 사용
<a name="cognito-user-pools-saml-idp"></a>

[Microsoft Active Directory Federation Services(ADFS)](https://msdn.microsoft.com/en-us/library/bb897402.aspx) 또는 [Shibboleth](http://www.shibboleth.net/) 같은 SAML ID 제공업체(idP)를 통해 웹 및 모바일 앱 사용자가 로그인하게 할 수 있습니다. [SAML 2.0 표준](http://saml.xml.org/saml-specifications)을 지원하는 SAML IdP를 선택해야 합니다.

관리형 로그인을 통해 Amazon Cognito는 로컬 및 타사 IdP 사용자를 인증하고 JSON 웹 토큰(JWT)을 발급합니다. Amazon Cognito에서 발급하는 토큰을 사용하면 여러 ID 소스를 모든 앱에 걸쳐 범용 OpenID Connect(OIDC) 표준으로 통합할 수 있습니다. Amazon Cognito는 타사 제공업체의 SAML 어설션을 해당 SSO 표준으로 처리할 수 있습니다. 에서 AWS Management Console,를 통해 AWS CLI또는 Amazon Cognito 사용자 풀 API를 사용하여 SAML IdP를 생성하고 관리할 수 있습니다. 에서 첫 번째 SAML IdP를 생성하려면 섹션을 AWS Management Console참조하세요[사용자 풀에서 SAML ID 제공업체 추가 및 관리](cognito-user-pools-managing-saml-idp.md).

![\[SAML 로그인의 인증 개요\]](http://docs.aws.amazon.com/ko_kr/cognito/latest/developerguide/images/scenario-authentication-saml.png)


**참고**  
타사 IdP를 통해 로그인하는 페더레이션은 Amazon Cognito 사용자 풀의 기능입니다. Amazon Cognito 페더레이션 ID라고도 하는 Amazon Cognito ID 풀은 각 ID 풀에서 별도로 설정해야 하는 페더레이션의 구현입니다. 사용자 풀은 ID 풀에 대한 타사 IdP일 수 있습니다. 자세한 내용은 [Amazon Cognito 자격 증명 풀](cognito-identity.md) 단원을 참조하십시오.

## IdP 구성에 대한 빠른 참조
<a name="cognito-user-pools-saml-idp-reference"></a>

요청을 수락하고 사용자 풀로 응답을 보내도록 SAML IdP를 구성해야 합니다. SAML IdP에 대한 설명서에는 SAML 2.0 IdP에 대한 신뢰 당사자 또는 애플리케이션으로 사용자 풀을 추가하는 방법에 대한 정보가 포함되어 있습니다. 다음 설명서에서는 SP 엔터티 ID 및 어설션 소비자 서비스(ACS) URL에 제공해야 하는 값을 제공합니다.사용자 풀 SAML 값 빠른 참조

**SP 엔터티 ID**  

```
urn:amazon:cognito:sp:us-east-1_EXAMPLE
```

**ACS URL**  

```
https://Your user pool domain/saml2/idpresponse
```

ID 제공업체를 지원하도록 사용자 풀을 구성해야 합니다. 외부 SAML IdP를 추가하는 상위 단계는 다음과 같습니다.

1. IdP 에서 SAML 메타데이터를 다운로드하거나 메타데이터 엔드포인트에 대한 URL을 검색합니다. [타사 SAML ID 제공업체 구성](cognito-user-pools-integrating-3rd-party-saml-providers.md)을(를) 참조하세요.

1. 사용자 풀에 새 IdP를 추가합니다. SAML 메타데이터를 업로드하거나 메타데이터 URL을 제공합니다. [사용자 풀에서 SAML ID 제공업체 추가 및 관리](cognito-user-pools-managing-saml-idp.md)을(를) 참조하세요.

1. 앱 클라이언트에 IdP를 할당합니다. [앱 클라이언트를 사용한 애플리케이션별 설정](user-pool-settings-client-apps.md)을(를) 참조하세요.

**Topics**
+ [IdP 구성에 대한 빠른 참조](#cognito-user-pools-saml-idp-reference)
+ [Amazon Cognito 사용자 풀 SAML IdP에 대해 알아야 할 사항](cognito-user-pools-saml-idp-things-to-know.md)
+ [SAML 사용자 이름의 대/소문자 구분](#saml-nameid-case-sensitivity)
+ [타사 SAML ID 제공업체 구성](cognito-user-pools-integrating-3rd-party-saml-providers.md)
+ [사용자 풀에서 SAML ID 제공업체 추가 및 관리](cognito-user-pools-managing-saml-idp.md)
+ [Amazon Cognito 사용자 풀에서 SAML 세션 시작](cognito-user-pools-SAML-session-initiation.md)
+ [단일 로그아웃으로 SAML 사용자 로그아웃](cognito-user-pools-saml-idp-sign-out.md)
+ [SAML 서명 및 암호화](cognito-user-pools-SAML-signing-encryption.md)
+ [SAML ID 제공업체 이름 및 식별자](cognito-user-pools-managing-saml-idp-naming.md)

# Amazon Cognito 사용자 풀 SAML IdP에 대해 알아야 할 사항
<a name="cognito-user-pools-saml-idp-things-to-know"></a>

SAML 2.0 IdP 구현에는 몇 가지 요구 사항 및 제한 사항이 있습니다. IdP를 구현할 때 이 섹션을 참조하세요. 또한 사용자 풀을 사용한 SAML 페더레이션 중에 오류를 해결하는 데 유용한 정보를 찾을 수 있습니다.

**Amazon Cognito가 SAML 어설션을 처리합니다.**  
Amazon Cognito 사용자 풀은 사후 바인딩 엔드포인트와의 SAML 2.0 페더레이션을 지원합니다. 이렇게 하면 사용자 풀이 사용자 에이전트를 통해 IdP로부터 직접 SAML 응답을 받으므로 앱에서 SAML 어설션 응답을 검색하거나 구문 분석할 필요가 없습니다. 사용자 풀은 애플리케이션을 대신하여 서비스 공급자(SP) 역할을 합니다. Amazon Cognito는 [SAML V2.0 기술 개요](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0-cd-02.html)의 섹션 5.1.2 및 5.1.4에 설명된 대로 SP 시작 및 IdP 시작 Single Sign-On(SSO)을 지원합니다.

**유효한 IdP 서명 인증서 제공**  
사용자 풀에서 SAML IdP를 구성할 경우 SAML 제공업체 메타데이터의 서명 인증서가 만료되지 않아야 합니다.

**사용자 풀은 여러 서명 인증서를 지원합니다.**  
SAML IdP가 SAML 메타데이터에 서명 인증서를 두 개 이상 포함하는 경우, 로그인 시 사용자 풀은 SAML 어설션이 SAML 메타데이터에 있는 인증서와 일치할 경우 유효하다고 판단합니다. 각 서명 인증서의 길이는 4,096자 이하여야 합니다.

**릴레이 상태 파라미터 유지**  
Amazon Cognito와 SAML IdP는 `relayState` 파라미터를 사용하여 세션 정보를 유지 관리합니다.  

1. Amazon Cognito는 80바이트보다 큰 `relayState` 값을 지원합니다. SAML 사양에는 `relayState` 값의 "길이가 80바이트를 초과해서는 안 된다"고 명시되어 있지만, 현재 업계 관행은 이 동작에서 벗어나는 경우가 많습니다. 결과적으로 80바이트보다 큰 `relayState` 값을 거부하면 많은 표준 SAML 공급자 통합이 중단됩니다.

1. `relayState` 토큰은 Amazon Cognito Cognito에서 유지 관리하는 상태 정보에 대한 불투명한 참조입니다. Amazon Cognito는 `relayState` 파라미터의 내용을 보장하지 않습니다. 앱이 결과에 따라 달라지도록 내용을 구문 분석하지 마세요. 자세한 내용은 [SAML 2.0 사양](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html)을 참조하세요.

**ACS 엔드포인트 식별**  
SAML 자격 증명 공급자에 어설션 소비자 엔드포인트를 설정해야 합니다. IdP는 SAML 어설션을 통해 사용자를 이 엔드포인트로 리디렉션합니다. SAML ID 제공업체의 SAML 2.0 POST 바인딩에 대해 사용자 풀 도메인에서 다음 엔드포인트 구성합니다.  

```
https://Your user pool domain/saml2/idpresponse
With an Amazon Cognito domain:
https://mydomain.auth.us-east-1.amazoncognito.com/saml2/idpresponse
With a custom domain:
https://auth.example.com/saml2/idpresponse
```
사용자 풀 도메인에 대한 자세한 정보는 [사용자 풀 도메인 구성](cognito-user-pools-assign-domain.md) 단원을 참조하세요.

**재생된 어설션 없음**  
Amazon Cognito `saml2/idpresponse` 엔드포인트에 대한 SAML 어설션을 반복하거나 *재생*할 수 없습니다. 재생된 SAML 어설션에는 이전 IdP 응답의 ID와 중복되는 어설션 ID가 있습니다.

**사용자 풀 ID는 SP 엔터티 ID입니다.**  
*대상 그룹 URI* 또는 *SP 엔터티 ID*라고도 하는 서비스 제공업체(SP) `urn`의 사용자 풀 ID를 IdP에 제공해야 합니다. 사용자 풀에 대한 대상 URI는 다음 형식을 갖습니다.  

```
urn:amazon:cognito:sp:us-east-1_EXAMPLE
```
[Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)의 **사용자 풀 개요**에서 사용자 풀 ID를 찾을 수 있습니다.

**모든 필수 속성 매핑**  
SAML IdP에서 사용자 풀에 필요한 대로 설정한 속성에 대한 속성 값도 제공하도록 구성해야 합니다. 예를 들어 `email`은 사용자 풀의 일반적인 필수 속성입니다. 사용자가 로그인하려면 먼저 SAML IdP 어설션에 **사용자 풀 속성** `email`에 매핑되는 클레임이 포함되어야 합니다. 속성 매핑에 대한 자세한 내용은 [프로필 및 토큰에 IdP 속성 매핑](cognito-user-pools-specifying-attribute-mapping.md)을 참조하십시오.

**어설션 형식에는 특정 요구 사항이 있습니다.**  
SAML IdP는 SAML 어설션에 다음 클레임을 포함해야 합니다.  
+ `NameID` 클레임. Amazon Cognito는 `NameID`를 통해 SAML 어설션을 대상 사용자와 연결합니다. `NameID`가 변경되면 Amazon Cognito는 어설션을 새 사용자를 위한 것으로 간주합니다. IdP 구성에서 `NameID`로 설정한 속성에는 영구 값이 있어야 합니다. 사용자 풀의 일관된 사용자 프로필에 SAML 사용자를 할당하려면 변경되지 않는 값이 있는 속성에서 `NameID` 클레임을 할당합니다.

  ```
  <saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:persistent">
    carlos
  </saml2:NameID>
  ```

  `urn:oasis:names:tc:SAML:1.1:nameid-format:persistent`의 IdP `NameID` 클레임에서 `Format`은 IdP가 변경되지 않는 값을 전달하고 있음을 나타냅니다. Amazon Cognito는 이 형식 선언을 필요로 하지 않으며, IdP가 `NameID` 클레임의 형식을 지정하지 않는 경우 `urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified` 형식을 할당합니다. 이 동작은 [SAML 2.0 사양](https://groups.oasis-open.org/higherlogic/ws/public/download/35711/sstc-saml-core-errata-2.0-wd-06-diff.pdf/latest)의 섹션 2.2.2 *복합 유형 NameIDType*을 준수합니다.
+ 사용자 풀 SP 엔터티 ID를 응답 대상으로 설정하는 `Audience` 값이 포함된 `AudienceRestriction` 클레임.

  ```
  <saml:AudienceRestriction>
    <saml:Audience> urn:amazon:cognito:sp:us-east-1_EXAMPLE
  </saml:AudienceRestriction>
  ```
+ SP가 시작한 Single Sign-On의 경우 원본 SAML 요청 ID의 `InResponseTo` 값이 있는 `Response` 요소입니다.

  ```
  <saml2p:Response Destination="https://mydomain.auth.us-east-1.amazoncognito.com/saml2/idpresponse" ID="id123" InResponseTo="_dd0a3436-bc64-4679-a0c2-cb4454f04184" IssueInstant="Date-time stamp" Version="2.0" xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  ```
**참고**  
IdP가 시작한 SAML 어설션에는 `InResponseTo` 값이 포함되어서는 *안 됩니다*.
+ 사용자 풀 `saml2/idpresponse` 엔드포인트의 `Recipient` 값과 SP가 시작한 SAML의 경우 원본 SAML 요청 ID와 일치하는 `InResponseTo` 값이 있는 `SubjectConfirmationData` 요소입니다.

  ```
  <saml2:SubjectConfirmationData InResponseTo="_dd0a3436-bc64-4679-a0c2-cb4454f04184" NotOnOrAfter="Date-time stamp" Recipient="https://mydomain.auth.us-east-1.amazoncognito.com/saml2/idpresponse"/>
  ```

**SP가 시작한 로그인 요청**  
[권한 부여 엔드포인트](authorization-endpoint.md)에서 사용자를 IdP 로그인 페이지로 리디렉션하면, Amazon Cognito는 *SAML 요청*을 `HTTP GET` 요청의 URL 파라미터에 포함합니다. SAML 요청에는 ACS 엔드포인트를 포함하여 사용자 풀에 대한 정보가 포함되어 있습니다. 이러한 요청에 암호화 서명을 선택적으로 적용할 수 있습니다.

**요청에 서명하고 응답을 암호화합니다.**  
SAML 제공업체가 있는 모든 사용자 풀은 Amazon Cognito가 SAML 요청에 할당하는 디지털 서명에 대한 비대칭 키 페어 및 *서명 인증서*를 생성합니다. 암호화된 SAML 응답을 지원하도록 구성하는 모든 외부 SAML IdP는 Amazon Cognito가 해당 제공업체에 대한 새 키 페어 및 *암호화 인증서*를 생성하도록 합니다. 퍼블릭 키가 포함된 인증서를 보고 다운로드하려면 Amazon Cognito 콘솔의 **소셜 및 외부 제공업체** 메뉴에서 IdP를 선택하세요.  
사용자 풀의 SAML 요청과 신뢰를 설정하려면 IdP에 사용자 풀 SAML 2.0 서명 인증서 사본을 제공합니다. 서명된 요청을 수락하도록 IdP를 구성하지 않으면 IdP가 사용자 풀이 서명한 SAML 요청을 무시할 수 있습니다.  

1. Amazon Cognito는 사용자가 IdP 에 전달하는 SAML 요청에 디지털 서명을 적용합니다. 사용자 풀은 모든 단일 로그아웃(SLO) 요청에 서명하며, 모든 SAML 외부 IdP 에 대한 Single Sign-On(SSO) 요청에 서명하도록 사용자 풀을 구성할 수 있습니다. 인증서 사본을 제공하면 IdP가 사용자 SAML 요청의 무결성을 확인할 수 있습니다.

1. SAML IdP는 암호화 인증서로 SAML 응답을 암호화할 수 있습니다. SAML 암호화로 IdP를 구성할 경우 IdP는 암호화된 응답만 전송해야 합니다.

**영숫자가 아닌 문자 인코딩**  
Amazon Cognito는 IdP가 속성 값으로 전달하는 4바이트 UTF-8 문자(예: 😐 또는 𠮷)를 허용하지 않습니다. 문자를 Base64로 인코딩하여 텍스트로 전달한 다음 앱에서 디코딩할 수 있습니다.  
다음 예제에서는 속성 클레임이 허용되지 않습니다.  

```
<saml2:Attribute Name="Name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
  <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">😐</saml2:AttributeValue>
</saml2:Attribute>
```
앞의 예제와 달리 다음 속성 클레임은 허용됩니다.  

```
<saml2:Attribute Name="Name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
  <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">8J+YkA==</saml2:AttributeValue>
</saml2:Attribute>
```

**메타데이터 엔드포인트에는 유효한 전송 계층 보안이 있어야 합니다.**  
HTTPS 메타데이터 엔드포인트 URL을 사용하여 SAML IdP를 생성하는 동안 `InvalidParameterException`(예: "*<metadata endpoint>*에서 메타데이터를 가져오는 동안 오류가 발생했습니다(Error retrieving metadata from <metadata endpoint>)")이 발생할 경우 메타데이터 엔드포인트에 SSL이 올바르게 설정되어 있고 유효한 SSL 인증서가 연결되어 있는지 확인합니다. 인증서 유효성 검사에 대한 자세한 내용은 [SSL/TLS 인증서란?](https://aws.amazon.com/what-is/ssl-certificate/) 섹션을 참조하십시오.

**메타데이터 엔드포인트는 HTTP 또는 HTTPS용 표준 TCP 포트에 있어야 합니다.**  
Amazon Cognito는 HTTP용 표준 TCP 포트 80 및 HTTPS용 443의 SAML 제공업체에 대한 메타데이터 URL만 허용합니다. 보안 모범 사례로 `https://` 접두사가 있는 TLS 암호화 URL에서 SAML 메타데이터를 호스팅합니다. 메타데이터 URL을 *`http://www.example.com/saml2/metadata.xml`* 또는 *`https://www.example.com/saml2/metadata.xml`* 형식으로 입력합니다. Amazon Cognito 콘솔은 `https://` 접두사가 있는 메타데이터 URL만 허용합니다. [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html) 및 [UpdateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html)를 사용하여 IdP 메타데이터를 구성할 수도 있습니다.

**IdP가 시작된 SAML이 있는 앱 클라이언트는 SAML로만 로그인할 수 있습니다.**  
앱 클라이언트에서 IdP 시작 서명을 지원하는 SAML 2.0 IdP에 대한 지원을 활성화할 경우 해당 앱 클라이언트에 다른 SAML 2.0 IdP만 추가할 수 있습니다. 이러한 방식으로 구성된 앱 클라이언트에 사용자 풀의 사용자 디렉터리 *및* 모든 비SAML 외부 ID 제공업체를 추가할 수 없습니다.

**로그아웃 응답은 POST 바인딩을 사용해야 합니다.**  
`/saml2/logout` 엔드포인트는 `LogoutResponse`를 `HTTP POST` 요청으로 수락합니다. 사용자 풀은 `HTTP GET` 바인딩이 있는 로그아웃 응답을 수락하지 않습니다.

**메타데이터 서명 인증서 교체**  
Amazon Cognito는 URL로 메타데이터를 제공할 때 최대 6시간 동안 SAML 메타데이터를 캐싱합니다. 메타데이터 서명 인증서 교체를 수행할 때 최소 6시간 동안 원본 인증서와 새 인증서를 *모두* 게시하도록 메타데이터 소스를 구성합니다. Amazon Cognito는 메타데이터 URL에서 캐시를 새로 고치면 각 인증서를 유효한 것으로 취급하고 SAML IdP가 새 인증서로 SAML 어설션 서명을 시작할 수 있습니다. 이 기간이 경과한 후에는 게시된 메타데이터에서 원본 인증서를 제거할 수 있습니다.

## SAML 사용자 이름의 대/소문자 구분
<a name="saml-nameid-case-sensitivity"></a>

페더레이션 사용자가 로그인을 시도할 때 SAML ID 제공업체(IdP)는 사용자의 SAML 어설션에서 Amazon Cognito에 고유한 `NameId`를 전달합니다. Amazon Cognito는 SAML 페더레이션 사용자를 해당 `NameId` 클레임으로 식별합니다. 사용자 풀의 대/소문자 구분 설정에 관계없이 Amazon Cognito는 고유하고 대소문자를 구분하는 `NameId` 클레임을 전달할 때 SAML IdP에서 반환된 페더레이션 사용자를 인식합니다. `email`과 같은 속성을 `NameId`에 매핑하고 사용자가 자신의 이메일 주소를 변경하는 경우 해당 사용자는 앱에 로그인할 수 없습니다.

변경되지 않는 값을 가진 IdP 속성의 SAML 어설션에서 `NameId`를 매핑합니다.

예를 들어 Carlos라는 사용자가 `NameId` 값인 `Carlos@example.com`을 전달한 Active Directory Federation Services(ADFS) SAML 어설션에서 가져온 대/소문자를 구분하지 않는 사용자 풀에서 사용자 프로필을 갖고 있는 경우 Carlos가 다음에 로그인을 시도할 때 ADFS IdP에서 `NameId` 값인 `carlos@example.com`을 전달합니다. `NameId`는 대/소문자를 정확하게 구분해야 하기 때문에 로그인이 실패합니다.

사용자가 `NameID` 변경 이후에 로그인할 수 없는 경우 사용자 풀에서 해당 사용자 프로필을 삭제합니다. Amazon Cognito는 이러한 사용자가 다음에 로그인할 때 새 사용자 프로필을 생성합니다.

**Topics**
+ [IdP 구성에 대한 빠른 참조](#cognito-user-pools-saml-idp-reference)
+ [Amazon Cognito 사용자 풀 SAML IdP에 대해 알아야 할 사항](cognito-user-pools-saml-idp-things-to-know.md)
+ [SAML 사용자 이름의 대/소문자 구분](#saml-nameid-case-sensitivity)
+ [타사 SAML ID 제공업체 구성](cognito-user-pools-integrating-3rd-party-saml-providers.md)
+ [사용자 풀에서 SAML ID 제공업체 추가 및 관리](cognito-user-pools-managing-saml-idp.md)
+ [Amazon Cognito 사용자 풀에서 SAML 세션 시작](cognito-user-pools-SAML-session-initiation.md)
+ [단일 로그아웃으로 SAML 사용자 로그아웃](cognito-user-pools-saml-idp-sign-out.md)
+ [SAML 서명 및 암호화](cognito-user-pools-SAML-signing-encryption.md)
+ [SAML ID 제공업체 이름 및 식별자](cognito-user-pools-managing-saml-idp-naming.md)

# 타사 SAML ID 제공업체 구성
<a name="cognito-user-pools-integrating-3rd-party-saml-providers"></a>

사용자 풀에 SAML ID 제공업체(idP)를 추가하려면 IdP 의 관리 인터페이스에서 일부 구성을 업데이트해야 합니다. 이 섹션에서는 IdP에 제공해야 하는 값의 형식을 지정하는 방법을 설명합니다. 또한 사용자 풀에 대한 IdP 및 SAML 클레임을 식별하는 정적 또는 활성 URL 메타데이터 문서를 검색하는 방법에 대해서도 알아볼 수 있습니다.

타사 SAML 2.0 ID 제공업체(IdP) 솔루션에서 Amazon Cognito 사용자 풀에 대한 페더레이션 작업을 수행하도록 구성하려면 다음 어설션 소비자 서비스(ACS) URL `https://mydomain.auth.us-east-1.amazoncognito.com/saml2/idpresponse`로 리디렉션하도록 SAML IdP를 구성해야 합니다. 사용자 풀에 Amazon Cognito 도메인이 있는 경우 [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)에 있는 사용자 풀의 **도메인** 메뉴에서 사용자 풀 도메인 경로를 찾을 수 있습니다.

일부 SAML IdP의 경우 대상 URI 또는 SP 엔터티 ID라고도 하는 `urn`를 `urn:amazon:cognito:sp:us-east-1_EXAMPLE` 형식으로 제공해야 합니다. Amazon Cognito 콘솔의 **사용자 풀 개요**에서 사용자 풀 ID를 찾을 수 있습니다.

또한 사용자 풀에서 *필수 속성*으로 지정한 모든 속성에 대한 값을 제공하도록 SAML IdP를 구성해야 합니다. 일반적으로 `email`은 사용자 풀에 필요한 속성이며, 이 경우 SAML IdP는 SAML 어설션에서 특정 형식의 `email` 클레임을 제공해야 하며, 해당 클레임을 해당 제공업체의 속성에 매핑해야 합니다.

타사 SAML 2.0 IdP 솔루션에 대한 다음 구성 정보는 Amazon Cognito 사용자 풀을 사용한 페더레이션 설정을 시작하기에 좋은 곳입니다. 최신 정보는 제공업체의 설명서를 직접 참조하세요.

SAML 요청에 서명하려면 사용자 풀 서명 인증서로 서명된 요청을 신뢰하도록 IdP를 구성해야 합니다. 암호화된 SAML 응답을 수락하려면 *모든* SAML 응답을 사용자 풀에 암호화하도록 IdP를 구성해야 합니다. 제공업체가 이러한 기능 구성에 대한 설명서를 제공합니다. Microsoft의 예제는 [Microsoft Entra SAML 토큰 암호화 구성](https://learn.microsoft.com/en-us/entra/identity/enterprise-apps/howto-saml-token-encryption)을 참조하세요.

**참고**  
Amazon Cognito에는 ID 제공업체 메타데이터 문서만 필요합니다. 제공업체는 IAM 또는 AWS IAM Identity Center와의 SAML 2.0 페더레이션을 위한 사용자 지정 구성 정보를 제공할 수도 있습니다. Amazon Cognito 통합을 설정하는 방법을 알아보려면 메타데이터 문서를 검색하고 사용자 풀의 나머지 구성을 관리하기 위한 일반적인 지침을 확인하세요.


| Solution | 추가 정보 | 
| --- | --- | 
| Microsoft Entra ID | [페더레이션 메타데이터](https://learn.microsoft.com/en-us/entra/identity-platform/federation-metadata) | 
| Okta | [SAML 앱 통합을 위해 IdP 메타데이터 및 SAML 서명 인증서를 다운로드하는 방법](https://support.okta.com/help/s/article/Location-to-download-Okta-IDP-XML-metadata-for-a-SAML-app-in-the-new-Admin-User-Interface) | 
| Auth0 | [Auth0을 SAML ID 제공업체로 구성](https://auth0.com/docs/authenticate/protocols/saml/saml-sso-integrations/configure-auth0-saml-identity-provider) | 
| Ping ID(PingFederate) | [PingFederate에서 SAML 메타데이터 내보내기](https://docs.pingidentity.com/integrations/contentful/configuring_single_sign-on/pf_contentful_integration_exporting_saml_metadata_from_pf.html) | 
| JumpCloud | [SAML 구성 정보](https://jumpcloud.com/support/saml-configuration-notes) | 
| SecureAuth | [SAML 애플리케이션 통합](https://docs.secureauth.com/2104/en/saml-application-integration.html) | 

# 사용자 풀에서 SAML ID 제공업체 추가 및 관리
<a name="cognito-user-pools-managing-saml-idp"></a>

Amazon Cognito에서 작동하도록 ID 제공업체를 구성한 후 사용자 풀 및 앱 클라이언트에 추가할 수 있습니다. 다음 절차에서는 Amazon Cognito 사용자 풀에서 SAML 제공업체를 생성, 수정 및 삭제하는 방법을 보여줍니다.

------
#### [ AWS Management Console ]

 AWS Management Console 를 사용하여 SAML 자격 증명 공급자(IdPs.

SAML IdP를 생성하기 전에 타사 IdP로부터 얻은 SAML 메타데이터 문서가 있어야 합니다. 필요한 SAML 메타데이터 문서를 가져오거나 생성하는 방법에 대한 지침은 [타사 SAML ID 제공업체 구성](cognito-user-pools-integrating-3rd-party-saml-providers.md) 섹션을 참조하세요.

**사용자 풀에 SAML 2.0 IdP를 구성하려면**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)로 이동합니다. 메시지가 표시되면 AWS 자격 증명을 입력합니다.

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

1. 목록에서 기존 사용자 풀을 선택하거나 [사용자 풀을 생성합니다](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. **소셜 및 외부 제공업체** 메뉴를 선택한 다음 **ID 제공업체 추가**를 선택합니다.

1. **SAML** IdP를 선택합니다.

1. **제공업체 이름**을 입력합니다. `identity_provider` 요청 파라미터에서 이 친숙한 이름을 [권한 부여 엔드포인트](authorization-endpoint.md)에 전달할 수 있습니다.

1. **식별자(Identifiers)**를 쉼표로 구분하여 입력합니다. 식별자는 사용자가 로그인할 때 입력한 이메일 주소를 확인한 다음, 사용자 도메인에 해당하는 공급자로 사용자를 보내도록 Amazon Cognito에 지시합니다.

1. 사용자가 로그아웃할 때 Amazon Cognito에서 서명된 로그아웃 요청을 공급자에게 보내도록 하려는 경우 **로그아웃 흐름 추가(Add sign-out flow)**를 선택합니다. 관리형 로그인을 구성할 때 생성되는 `https://mydomain.auth.us-east-1.amazoncognito.com/saml2/logout` 엔드포인트에 로그아웃 응답을 보내도록 SAML 2.0 IdP를 구성해야 합니다. `saml2/logout` 엔드포인트는 POST 바인딩을 사용합니다.
**참고**  
이 옵션을 선택하고 SAML IdP에 서명된 로그아웃 요청이 필요한 경우 사용자 풀의 서명 인증서도 SAML IdP에 제공해야 합니다.  
SAML IdP가 서명된 로그아웃 요청을 처리하고 사용자를 Amazon Cognito 세션에서 로그아웃합니다.

1. **IdP 시작 SAML 로그인** 구성을 선택합니다. 보안 모범 사례로 **SP 시작 SAML 어설션만 수락**을 선택합니다. 원치 않는 SAML 로그인 세션을 안전하게 수락하도록 환경을 준비한 경우 **SP 시작 및 IdP 시작 SAML 어설션 수락**을 선택합니다. 자세한 내용은 [Amazon Cognito 사용자 풀에서 SAML 세션 시작](cognito-user-pools-SAML-session-initiation.md) 단원을 참조하십시오.

1. **메타데이터 문서 소스(Metadata document source)**를 선택합니다. IdP가 퍼블릭 URL에서 SAML 메타데이터를 제공하는 경우 **메타데이터 문서 URL(Metadata document URL)**을 선택하고 해당 퍼블릭 URL을 입력할 수 있습니다. 그렇지 않은 경우 **메타데이터 문서 업로드(Upload metadata document)**를 선택한 다음, 이전에 공급자로부터 다운로드한 메타데이터 파일을 선택합니다.
**참고**  
제공업체에게 퍼블릭 엔드포인트가 있는 경우 파일을 업로드하는 대신 메타데이터 문서 URL을 입력하는 것이 좋습니다. Amazon Cognito는 메타데이터 URL에서 메타데이터를 자동으로 새로 고칩니다. 일반적으로 메타데이터 새로 고침은 6시간마다 또는 메타데이터가 만료되기 전 중 더 빠른 시간에 발생합니다.

1. **SAML 제공업체와 앱 간에 속성 매핑**을 선택하여 SAML 제공업체 속성을 사용자 풀의 사용자 프로파일에 매핑합니다. 속성 맵에 사용자 풀 필수 속성을 포함합니다.

   예를 들어, **사용자 풀 속성(User pool attribute)** `email`을 선택한 경우 IdP의 SAML 어설션에 표시된 대로 SAML 속성 이름을 입력합니다. IdP가 샘플 SAML 어설션을 제공하는 경우 이 샘플 어설션을 사용하여 이름을 찾을 수 있습니다. 일부 IdP는 `email`과 같은 간단한 이름을 사용하는 반면 다른 IdP는 다음과 같은 이름을 사용합니다.

   ```
   http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
   ```

1. **생성(Create)**을 선택합니다.

------
#### [ API/CLI ]

다음 명령을 사용하여 SAML 자격 증명 공급자(IdP)를 생성 및 관리합니다.

**IdP를 생성하고 메타데이터 문서를 업로드하려면**
+ AWS CLI: `aws cognito-idp create-identity-provider`

  메타데이터 파일이 포함된 예제: `aws cognito-idp create-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1 --provider-type SAML --provider-details file:///details.json --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`

  여기서 `details.json`에 다음 사항이 포함됩니다.

  ```
  "ProviderDetails": { 
        "MetadataFile": "<SAML metadata XML>",
        "IDPSignout" : "true",
        "RequestSigningAlgorithm" : "rsa-sha256",
        "EncryptedResponses" : "true",
        "IDPInit" : "true"
  }
  ```
**참고**  
*<SAML 메타데이터 XML>*에 `"` 문자의 인스턴스가 포함된 경우 `\`를 이스케이프 문자(`\"`)로 추가해야 합니다.

  메타데이터 URL이 포함된 예제: `aws cognito-idp create-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1 --provider-type SAML --provider-details MetadataURL=https://myidp.example.com/sso/saml/metadata --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`
+ AWS API: [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html)

**IdP에 대한 새 메타데이터 문서를 업로드하려면**
+ AWS CLI: `aws cognito-idp update-identity-provider`

  메타데이터 파일이 포함된 예제: `aws cognito-idp update-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1 --provider-details file:///details.json --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`

  여기서 `details.json`에 다음 사항이 포함됩니다.

  ```
  "ProviderDetails": { 
        "MetadataFile": "<SAML metadata XML>",
        "IDPSignout" : "true",
        "RequestSigningAlgorithm" : "rsa-sha256",
        "EncryptedResponses" : "true",
        "IDPInit" : "true"
  }
  ```
**참고**  
*<SAML 메타데이터 XML>*에 `"` 문자의 인스턴스가 포함된 경우 `\`를 이스케이프 문자(`\"`)로 추가해야 합니다.

  메타데이터 URL이 포함된 예제: `aws cognito-idp update-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1 --provider-details MetadataURL=https://myidp.example.com/sso/saml/metadata --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`
+ AWS API: [UpdateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html)

**특정 IdP에 대한 정보를 가져오려면**
+ AWS CLI: `aws cognito-idp describe-identity-provider`

  `aws cognito-idp describe-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1`
+ AWS API: [DescribeIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeIdentityProvider.html)

**모든 IdP에 대한 정보를 나열하려면**
+ AWS CLI: `aws cognito-idp list-identity-providers`

  예시: `aws cognito-idp list-identity-providers --user-pool-id us-east-1_EXAMPLE --max-results 3`
+ AWS API: [ListIdentityProviders](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListIdentityProviders.html)

**IdP를 삭제하려면**
+ AWS CLI: `aws cognito-idp delete-identity-provider`

  `aws cognito-idp delete-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1`
+ AWS API: [DeleteIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteIdentityProvider.html)

------

**사용자 풀을 신뢰 당사자로 추가하도록 SAML IdP를 설정하려면**
+ 사용자 풀 서비스 공급자 URN은 `urn:amazon:cognito:sp:us-east-1_EXAMPLE`입니다. Amazon Cognito에는 SAML 응답에서 이 URN과 일치하는 대상 제한 값이 필요합니다. IdP에서 SP로 보내는 응답 메시지에 대해 다음 POST 바인딩 엔드포인트를 사용하도록 IdP를 구성합니다.

  ```
  https://mydomain.auth.us-east-1.amazoncognito.com/saml2/idpresponse
  ```
+ SAML IdP가 SAML 어설션의 사용자 풀에 대한 필수 속성과 `NameID`를 채워야 합니다. `NameID`는 사용자 풀에서 SAML 페더레이션 사용자를 고유하게 식별하는 데 사용됩니다. IdP는 각 사용자의 SAML 이름 ID를 대/소문자를 구분하는 일관된 형식으로 전달해야 합니다. 사용자 이름 ID의 값이 변경되면 새 사용자 프로필이 생성됩니다.

**SAML 2.0 IDP에 서명 인증서를 제공하려면**
+ IdP가 SAML 로그아웃 요청을 검증하는 데 사용할 수 있는 퍼블릭 키의 사본을 Amazon Cognito에서 다운로드하려면 사용자 풀의 **소셜 및 외부 제공업체** 메뉴를 선택하고 IdP를 선택한 다음 **서명 인증서 보기**에서 **.crt로 다운로드**를 선택합니다.

Amazon Cognito 콘솔을 사용하여 사용자 풀에 설정한 SAML 공급자를 삭제할 수 있습니다.

**SAML 공급자 삭제**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)에 로그인합니다.

1. 탐색 창에서 [**사용자 풀(User Pools)**]을 선택한 다음 편집할 사용자 풀을 선택합니다.

1. **소셜 및 외부 제공업체** 메뉴를 선택합니다.

1. 삭제할 SAML IdP 옆에 있는 라디오 버튼을 선택합니다.

1. **자격 증명 공급자 삭제(Delete identity provider)** 메시지가 표시되면 SAML 공급자의 이름을 입력하여 삭제를 확인하고 **삭제(Delete)**를 선택합니다.

# Amazon Cognito 사용자 풀에서 SAML 세션 시작
<a name="cognito-user-pools-SAML-session-initiation"></a>

Amazon Cognito는 서비스 제공업체 시작(SP 시작), Single Sign-On(SSO) 및 IdP 시작 SSO를 지원합니다. 가장 좋은 방법은 사용자 풀에서 SP 시작 SSO를 구현하는 것입니다. [SAML V2.0 Technical Overview](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0-cd-02.html#5.1.2.SP-Initiated%20SSO:%20%20Redirect/POST%20Bindings|outline)(SAML V2.0 기술 개요)의 섹션 5.1.2에서는 SP 시작 SSO에 대해 설명합니다. Amazon Cognito는 앱의 자격 증명 공급자(IdP)입니다. 이 앱은 인증된 사용자에 대한 토큰을 검색하는 서비스 공급자(SP)입니다. 그러나 서드 파티 IdP를 사용하여 사용자를 인증할 때 Amazon Cognito가 SP입니다. SAML 2.0 사용자가 SP 시작 흐름으로 인증하는 경우 항상 먼저 Amazon Cognito에 요청하고 인증을 위해 IdP로 리디렉션해야 합니다.

일부 엔터프라이즈 사용 사례의 경우 내부 애플리케이션에 대한 액세스는 엔터프라이즈 IdP가 호스팅하는 대시보드의 북마크에서 시작됩니다. 사용자가 북마크를 선택하면 IdP가 SAML 응답을 생성하고 SP로 전송하여 해당 애플리케이션을 사용하여 사용자를 인증합니다.

IdP 시작 SSO를 지원하도록 사용자 풀에서 SAML IdP를 구성할 수 있습니다. IdP 시작 인증을 지원하는 경우 Amazon Cognito는 SAML 요청으로 인증을 시작하지 않기 때문에 Amazon Cognito는 수신한 SAML 응답을 요청했는지 확인할 수 없습니다. SP 시작 SSO에서 Amazon Cognito는 원본 요청에 대한 SAML 응답을 검증하는 상태 파라미터를 설정합니다. SP 시작 로그인을 사용하면 사이트 간 요청 위조(CSRF)로부터 보호할 수도 있습니다.

**Topics**
+ [SP 시작 SAML 로그인 구현](#cognito-user-pools-saml-idp-authentication)
+ [IdP 시작 SAML 로그인 구현](#cognito-user-pools-SAML-session-initiation-idp-initiation)

## SP 시작 SAML 로그인 구현
<a name="cognito-user-pools-saml-idp-authentication"></a>

가장 좋은 방법은 사용자 풀에 대한 서비스 제공업체 시작(SP 시작) 로그인을 구현하는 것입니다. Amazon Cognito는 사용자의 세션을 시작하고 이를 IdP 로 리디렉션합니다. 이 메서드를 사용하면 로그인 요청을 제시하는 사용자를 가장 잘 제어할 수 있습니다. 특정 조건에서 IdP가 시작한 로그인을 허용할 수도 있습니다.

다음 프로세스는 사용자가 SAML 제공업체를 통해 사용자 풀에 대한 SP 시작 로그인을 완료하는 방법을 보여줍니다.

![\[Amazon Cognito SP가 시작한 SAML 로그인의 인증 흐름도입니다.\]](http://docs.aws.amazon.com/ko_kr/cognito/latest/developerguide/images/scenario-authentication-saml-stepbystep.png)


1. 사용자가 로그인 페이지에 이메일 주소를 입력합니다. 사용자가 IdP로 리디렉션되는 방식을 확인하려면 맞춤형 애플리케이션에서 사용자의 이메일 주소를 수집하거나 웹 보기에서 관리형 로그인을 호출하면 됩니다.

   IdP 목록을 표시하거나 이메일 주소를 입력하라는 메시지를 표시하고 이를 SAML IdP의 식별자와 일치시키도록 관리형 로그인 페이지를 구성할 수 있습니다. 이메일 주소를 입력하라는 메시지를 표시하려면 관리형 로그인 브랜딩 스타일을 편집하고 **파운데이션**에서 **인증 동작**을 찾은 다음 **제공업체 표시**에서 **표시 스타일**을 **도메인 검색 입력**으로 설정합니다.

1. 앱은 사용자 풀 리디렉션 엔드포인트를 호출하고 앱에 해당하는 클라이언트 ID와 사용자에 해당하는 IdP ID로 세션을 요청합니다.

1. Amazon Cognito는 `AuthnRequest` 요소에서 [선택적으로 서명된](cognito-user-pools-SAML-signing-encryption.md#cognito-user-pools-SAML-signing.title) SAML 요청과 함께 사용자를 IdP로 리디렉션합니다.

1. IdP는 대화형으로 또는 브라우저 쿠키에서 기억된 세션으로 사용자를 인증합니다.

1. IdP는 POST 페이로드에서 [선택적으로 암호화된](cognito-user-pools-SAML-signing-encryption.md#cognito-user-pools-SAML-signing-encryption.title) SAML 어설션을 사용하여 사용자를 사용자 풀 SAML 응답 엔드포인트로 리디렉션합니다.
**참고**  
Amazon Cognito는 5분 이내에 응답을 받지 못하는 세션을 취소하고 사용자를 관리형 로그인으로 리디렉션합니다. 사용자에게 이 결과가 발생하면 `Something went wrong` 오류 메시지가 표시됩니다.

1. Amazon Cognito는 SAML 어설션을 확인하고 응답의 클레임에서 [사용자 속성을 매핑](cognito-user-pools-specifying-attribute-mapping.md#cognito-user-pools-specifying-attribute-mapping.title)한 후 내부적으로 사용자 풀에서 사용자 프로필을 생성하거나 업데이트합니다. 일반적으로 사용자 풀은 사용자의 브라우저 세션에 권한 부여 코드를 반환합니다.

1. 사용자가 앱에 인증 코드를 제시하면 앱은 코드를 JSON 웹 토큰(JWT)으로 교환합니다.

1. 앱은 사용자의 ID 토큰을 인증으로 수락 및 처리하고, 액세스 토큰을 사용하여 리소스에 대한 승인된 요청을 생성하고, 새로 고침 토큰을 저장합니다.

사용자가 인증하고 권한 부여 코드를 부여 받으면 사용자 풀은 ID, 액세스 및 새로 고침 토큰을 반환합니다. ID 토큰은 OIDC 기반 ID 관리를 위한 인증 개체입니다. 액세스 토큰은 [OAuth 2.0](https://oauth.net/2/) 범위가 있는 권한 부여 개체입니다. 새로 고침 토큰은 사용자의 현재 토큰이 만료되었을 때 새 ID 및 액세스 토큰을 생성하는 개체입니다. 사용자 풀 앱 클라이언트에서 사용자 토큰의 기간을 구성할 수 있습니다.

새로 고침 토큰의 기간을 선택할 수도 있습니다. 사용자의 새로 고침 토큰이 만료되면 다시 로그인해야 합니다. SAML IdP를 통해 인증된 경우 사용자의 세션 기간은 IdP를 사용한 세션 만료가 아니라 토큰 만료로 설정됩니다. 앱은 각 사용자의 새로 고침 토큰을 저장하고 만료 시 세션을 갱신해야 합니다. 관리형 로그인은 1시간 동안 유효한 브라우저 쿠키에 사용자 세션을 유지합니다.

## IdP 시작 SAML 로그인 구현
<a name="cognito-user-pools-SAML-session-initiation-idp-initiation"></a>

IdP 시작 SAML 2.0 로그인을 위해 ID 제공업체를 구성할 경우 [권한 부여 엔드포인트](authorization-endpoint.md)에서 세션을 시작할 필요 없이 사용자 풀 도메인의 `saml2/idpresponse` 엔드포인트에 SAML 어설션을 제공할 수 있습니다. 이 구성의 사용자 풀은 요청된 앱 클라이언트가 지원하는 사용자 풀 외부 ID 제공업체로부터 IdP 시작 SAML 어설션을 수락합니다.

![\[Amazon Cognito IdP 시작 SAML 로그인의 인증 흐름도입니다.\]](http://docs.aws.amazon.com/ko_kr/cognito/latest/developerguide/images/scenario-authentication-saml-idpinit.png)


1. 사용자가 애플리케이션으로 SAML 로그인을 요청합니다.

1. 애플리케이션은 브라우저를 호출하거나 사용자를 SAML 제공업체의 로그인 페이지로 리디렉션합니다.

1. IdP는 대화형으로 또는 브라우저 쿠키에서 기억된 세션으로 사용자를 인증합니다.

1. IdP는 POST 본문에서 SAML 어설션 또는 응답을 사용하여 사용자를 애플리케이션으로 리디렉션합니다.

1. 애플리케이션은 요청의 POST 본문에 SAML 어설션을 사용자 풀 `saml2/idpresponse` 엔드포인트에 추가합니다.

1. Amazon Cognito는 사용자에게 승인 코드를 발급합니다.

1. 사용자가 앱에 인증 코드를 제시하면 앱은 코드를 JSON 웹 토큰(JWT)으로 교환합니다.

1. 애플리케이션은 사용자의 ID 토큰을 인증으로 수락 및 처리하고, 액세스 토큰을 사용하여 리소스에 대한 승인된 요청을 생성하고, 새로 고침 토큰을 저장합니다.

다음 단계에서는 IdP 시작 SAML 2.0 제공업체를 구성하고 로그인하는 전체 프로세스를 설명합니다.

1. 사용자 풀 및 앱 클라이언트를 생성하거나 지정합니다.

1. 사용자 풀에 SAML 2.0 IdP를 생성합니다.

1. IdP 시작을 지원하도록 IdP를 구성합니다. IdP 시작 SAML은 다른 SSO 제공업체에 적용되지 않는 보안 고려 사항을 도입합니다. 따라서 사용자 풀 자체를 포함하여 IdP 시작 로그인이 포함된 SAML 제공업체를 사용하는 앱 클라이언트에는 비SAML IdP 추가할 수 없습니다.

1. IdP 시작 SAML 제공업체를 사용자 풀의 앱 클라이언트와 연결합니다.

1. 사용자를 SAML IdP의 로그인 페이지로 안내하고 SAML 어설션을 검색합니다.

1. SAML 어설션을 사용하여 사용자를 사용자 풀 `saml2/idpresponse` 엔드포인트로 안내합니다.

1. JSON 웹 토큰(JWT)을 받습니다.

사용자 풀에서 원치 않는 SAML 어설션을 수락하려면 앱 보안에 미치는 영향을 고려해야 합니다. IdP에서 시작한 요청을 수락할 때 요청 스푸핑 및 CSRF 시도가 발생할 수 있습니다. 사용자 풀은 IdP에서 시작한 로그인 세션을 확인할 수 없지만 Amazon Cognito는 요청 파라미터와 SAML 어설션을 검증합니다.

또한 SAML 어설션에는 `InResponseTo` 클레임이 포함되어서는 안 되며 이전 6분 이내에 발급되었어야 합니다.

IdP가 시작한 SAML을 사용하여 요청을 사용자의 `/saml2/idpresponse`에 제출해야 합니다. SP 시작 및 관리형 로그인 권한 부여 요청의 경우 요청된 앱 클라이언트, 범위, 리디렉션 URI 및 기타 세부 정보를 식별하는 파라미터를 `HTTP GET` 요청의 쿼리 문자열 파라미터로 제공해야 합니다. 그러나 IdP 시작 SAML 어설션의 경우 요청의 세부 정보는 `HTTP POST` 요청 본문의 `RelayState` 파라미터로 형식이 지정되어야 합니다. 요청 본문에 SAML 어설션도 `SAMLResponse` 파라미터로 포함되어야 합니다.

다음은 IdP가 시작한 SAML 제공업체에 대한 요청 및 응답의 예시입니다.

```
POST /saml2/idpresponse HTTP/1.1
User-Agent: USER_AGENT
Accept: */*
Host: example.auth.us-east-1.amazoncognito.com
Content-Type: application/x-www-form-urlencoded

SAMLResponse=[Base64-encoded SAML assertion]&RelayState=identity_provider%3DMySAMLIdP%26client_id%3D1example23456789%26redirect_uri%3Dhttps%3A%2F%2Fwww.example.com%26response_type%3Dcode%26scope%3Demail%2Bopenid%2Bphone

HTTP/1.1 302 Found
Date: Wed, 06 Dec 2023 00:15:29 GMT
Content-Length: 0
x-amz-cognito-request-id: 8aba6eb5-fb54-4bc6-9368-c3878434f0fb
Location: https://www.example.com?code=[Authorization code]
```

------
#### [ AWS Management Console ]

**IdP 시작 SAML에 대한 IdP를 구성하는 방법**

1. [사용자 풀 ](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html), [앱 클라이언트](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-configuring-app-integration.html) 및 SAML ID 제공업체를 생성합니다.

1. 연결된 경우 앱 클라이언트에서 모든 소셜 및 OIDC ID 제공업체의 연결을 해제합니다.

1. 사용자 풀의 **소셜 및 외부 제공업체** 메뉴로 이동합니다.

1. SAML 제공업체를 편집하거나 추가합니다.

1. **IdP 시작 SAML 로그인**에서 **SP 시작 및 IdP 시작 SAML 어설션 수락**을 선택합니다.

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

------
#### [ API/CLI ]

**IdP 시작 SAML에 대한 IdP를 구성하는 방법**

[CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html) 또는 [UpdateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html) API 요청의 `IDPInit` 파라미터로 IdP 시작 SAML을 구성합니다. 다음은 IdP 시작 SAML을 지원하는 IdP의 `ProviderDetails` 예시입니다.

```
"ProviderDetails": { 
      "MetadataURL" : "https://myidp.example.com/saml/metadata",
      "IDPSignout" : "true",
      "RequestSigningAlgorithm" : "rsa-sha256",
      "EncryptedResponses" : "true",
      "IDPInit" : "true"
}
```

------

# 단일 로그아웃으로 SAML 사용자 로그아웃
<a name="cognito-user-pools-saml-idp-sign-out"></a>

Amazon Cognito는 SAML 2.0 [단일 로그아웃](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0-cd-02.html#5.3.Single%20Logout%20Profile|outline)(SLO)을 지원합니다. SLO를 사용하면 애플리케이션이 사용자 풀에서 로그아웃할 때 SAML ID 제공업체(IdPs)에서 사용자를 로그아웃할 수 있습니다. 이렇게 하면 사용자가 애플리케이션에 다시 로그인하려는 경우 SAML IdP 로 인증해야 합니다. 그렇지 않으면 자격 증명을 제공할 필요 없이 애플리케이션으로 전달하는 IdP 또는 사용자 풀 브라우저 쿠키가 있을 수 있습니다.

**로그아웃 흐름**을 지원하도록 SAML IdP를 구성하면 Amazon Cognito는 서명된 SAML 로그아웃 요청을 사용하여 사용자를 IdP로 리디렉션합니다. Amazon Cognito는 IdP 메타데이터의 `SingleLogoutService` URL에서 리디렉션 위치를 결정합니다. Amazon Cognito는 사용자 풀 서명 인증서로 로그아웃 요청에 서명합니다.

![\[Amazon Cognito SAML 로그아웃의 인증 흐름도입니다. 사용자가 로그아웃을 요청하면 Amazon Cognito는 SAML 로그아웃 요청을 사용하여 제공업체로 리디렉션합니다.\]](http://docs.aws.amazon.com/ko_kr/cognito/latest/developerguide/images/scenario-authentication-saml-sign-out.png)


SAML 세션이 있는 사용자를 사용자 풀 `/logout` 엔드포인트로 연결하면 Amazon Cognito는 다음 요청을 사용하여 SAML 사용자를 IdP 메타데이터에 지정된 SLO 엔드포인트로 리디렉션합니다.

```
https://[SingleLogoutService endpoint]?
SAMLRequest=[encoded SAML request]&
RelayState=[RelayState]&
SigAlg=http://www.w3.org/2001/04/xmldsig-more#rsa-sha256&
Signature=[User pool RSA signature]
```

그런 다음 사용자는 IdP에서 `LogoutResponse`를 사용하여 `saml2/logout` 엔드포인트로 돌아갑니다. IdP는 `HTTP POST` 요청으로 `LogoutResponse`를 전송해야 합니다. 그런 다음 Amazon Cognito는 초기 로그아웃 요청에서 리디렉션 대상으로 리디렉션합니다.

SAML 제공업체는 두 개 이상의 `AuthnStatement`가 포함된 `LogoutResponse`를 보낼 수 있습니다. 이 유형의 응답에서 첫 번째 `AuthnStatement`의 `sessionIndex`는 원래 사용자를 인증한 SAML 응답의 `sessionIndex`와 일치해야 합니다. `sessionIndex`가 다른 `AuthnStatement`에 있는 경우 Amazon Cognito는 세션을 인식하지 못하며 사용자는 로그아웃되지 않습니다.

------
#### [ AWS Management Console ]

**SAML 로그아웃을 구성하는 방법**

1. [사용자 풀 ](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html), [앱 클라이언트](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-configuring-app-integration.html) 및 SAML IdP를 생성합니다.

1. SAML ID 제공업체를 생성하거나 편집할 때 **ID 제공업체 정보**에서 **로그아웃 흐름 추가**라는 제목의 확인란을 선택합니다.

1. 사용자 풀의 **소셜 및 외부 제공업체** 메뉴에서 IdP를 선택하고 **서명 인증서**를 찾습니다.

1. **.crt로 다운로드**를 선택합니다.

1. SAML 단일 로그아웃 및 요청 서명을 지원하도록 SAML 제공업체를 구성하고 사용자 풀 서명 인증서를 업로드합니다. IdP는 사용자 풀 도메인의 `/saml2/logout`으로 리디렉션해야 합니다.

------
#### [ API/CLI ]

**SAML 로그아웃을 구성하는 방법**

[CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html) 또는 [UpdateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html) API 요청의 `IDPSignout` 파라미터를 사용하여 단일 로그아웃을 구성합니다. 다음은 SAML 단일 로그아웃을 지원하는 IdP의 `ProviderDetails` 예시입니다.

```
"ProviderDetails": { 
      "MetadataURL" : "https://myidp.example.com/saml/metadata",
      "IDPSignout" : "true",,
      "RequestSigningAlgorithm" : "rsa-sha256",
      "EncryptedResponses" : "true",
      "IDPInit" : "true"
}
```

------

# SAML 서명 및 암호화
<a name="cognito-user-pools-SAML-signing-encryption"></a>

SAML 2.0 로그인은 애플리케이션 사용자가 인증 흐름에서 요청과 응답을 전달하는 주체가 되어 구축됩니다. 사용자가 전송 중에 이러한 SAML 문서를 읽거나 수정하지 않도록 해야 할 수도 있습니다. 이렇게 하려면 사용자 풀의 SAML ID 제공업체(IdPs)에 SAML 서명 및 암호화를 추가하십시오. SAML 서명으로 사용자 풀은 SAML 로그인 및 로그아웃 요청에 서명을 추가합니다. 사용자 풀 퍼블릭 키를 사용하면 IdP가 수정되지 않은 SAML 요청을 수신하고 있는지 확인할 수 있습니다. 그런 다음 IdP가 응답하고 SAML 어설션을 사용자의 브라우저 세션에 전달하면 IdP는 사용자가 자신의 속성과 권한을 검사할 수 없도록 해당 응답을 암호화할 수 있습니다.

SAML 서명 및 암호화를 사용하면 사용자 풀 SAML 작업 중 모든 암호화 작업은 Amazon Cognito가 생성하는 사용자 풀 제공 키를 사용하여 서명 및 사이퍼텍스트를 생성해야 합니다. 현재 외부 키를 사용하여 요청에 서명하거나 암호화된 어설션을 수락하도록 사용자 풀을 구성할 수 없습니다.

**참고**  
사용자 풀 인증서는 10년 동안 유효합니다. Amazon Cognito는 1년에 한 번 사용자 풀에 대한 새 서명 및 암호화 인증서를 생성합니다. Amazon Cognito는 서명 인증서를 요청할 때 가장 최근의 인증서를 반환하고 가장 최근의 서명 인증서로 요청에 서명합니다. IdP는 만료되지 않은 모든 사용자 풀 암호화 인증서로 SAML 어설션을 암호화할 수 있습니다. 이전 인증서는 전체 기간 동안 계속 유효하며 퍼블릭 키는 인증서 간에 변경되지 않습니다. 가장 좋은 방법은 매년 제공업체 구성에서 인증서를 업데이트하는 것입니다.

**Topics**
+ [IdP에서 암호화된 SAML 응답 수락](#cognito-user-pools-SAML-encryption)
+ [SAML 요청 서명](#cognito-user-pools-SAML-signing)

## IdP에서 암호화된 SAML 응답 수락
<a name="cognito-user-pools-SAML-encryption"></a>

Amazon Cognito와 IdP는 사용자가 로그인하고 로그아웃할 때 SAML 응답에서 기밀성을 설정할 수 있습니다. Amazon Cognito는 사용자 풀에서 구성한 각 외부 SAML 제공업체에 퍼블릭 프라이빗 RSA 키 페어와 인증서를 할당합니다. 사용자 풀 SAML 제공업체에 대한 응답 암호화를 활성화할 경우 암호화된 SAML 응답을 지원하는 IdP에 인증서를 업로드해야 합니다. IdP가 제공된 키로 모든 SAML 어설션 암호화를 시작하기 전에는 SAML IdP에 대한 사용자 풀 연결이 작동하지 않습니다.

다음은 암호화된 SAML 로그인의 흐름에 대한 개요입니다.

1. 사용자가 로그인을 시작하고 SAML IdP를 선택합니다.

1. 사용자 풀 [권한 부여 엔드포인트](authorization-endpoint.md)은 SAML 로그인 요청을 통해 사용자를 SAML IdP로 리디렉션합니다. 사용자 풀은 선택적으로 이 요청에 IdP의 무결성 검증을 가능하게 하는 서명을 추가할 수 있습니다. SAML 요청에 서명하려면 사용자 풀이 서명 인증서의 퍼블릭 키로 서명한 요청을 수락하도록 IdP를 구성해야 합니다.

1. SAML IdP는 사용자에 서명하고 SAML 응답을 생성합니다. IdP는 퍼블릭 키를 사용하여 응답을 암호화하고 사용자를 사용자 풀 `/saml2/idpresponse` 엔드포인트로 리디렉션합니다. IdP는 SAML 2.0 사양에 정의된 대로 응답을 암호화해야 합니다. 자세한 내용은 [OASIS SAML(Security Assertion Markup Language) V2.0에 대한 어설션 및 프로토콜](https://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf)의 `Element <EncryptedAssertion>` 섹션을 참조하세요.

1. 사용자 풀은 프라이빗 키를 사용하여 SAML 응답의 사이퍼텍스트를 해독하고 사용자에 로그인합니다.

**중요**  
사용자 풀에서 SAML IdP에 대한 응답 암호화를 활성화할 때 IdP는 제공업체 전용 퍼블릭 키로 모든 응답을 암호화해야 합니다. Amazon Cognito는 암호화를 지원하도록 구성한 SAML 외부 IdP에서 암호화되지 않은 SAML 응답을 수락하지 않습니다.

사용자 풀에 있는 모든 외부 SAML IdP는 응답 암호화를 지원할 수 있으며, 각 IdP는 자체 키 페어를 받습니다.

------
#### [ AWS Management Console ]

**SAML 응답 암호화를 구성하는 방법**

1. [사용자 풀 ](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html), [앱 클라이언트](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-configuring-app-integration.html) 및 SAML IdP를 생성합니다.

1. SAML ID 제공업체를 생성하거나 편집할 때 **서명 요청 및 응답 암호화**에서 **이 제공업체로부터 암호화된 SAML 어설션 필요**라는 제목의 확인란을 선택합니다.

1. 사용자 풀의 **소셜 및 외부 제공업체** 메뉴에서 SAML IdP를 선택하고 **암호화 인증서 보기**를 선택합니다.

1. **.crt로 다운로드**를 선택하고 다운로드한 파일을 SAML IdP에 제공합니다. 인증서의 키를 사용하여 SAML 응답을 암호화하도록 SAML IdP를 구성합니다.

------
#### [ API/CLI ]

**SAML 응답 암호화를 구성하는 방법**

[CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html) 또는 [UpdateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html) API 요청의 `EncryptedResponses` 파라미터를 사용하여 응답 암호화를 구성합니다. 다음은 요청 서명을 지원하는 IdP의 `ProviderDetails` 예시입니다.

```
"ProviderDetails": { 
      "MetadataURL" : "https://myidp.example.com/saml/metadata",
      "IDPSignout" : "true",
      "RequestSigningAlgorithm" : "rsa-sha256",
      "EncryptedResponses" : "true",
      "IDPInit" : "true"
}
```

사용자 풀에서 암호화 인증서를 가져오려면 [DescribeIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeIdentityProvider.html) API 요청을 수행하고 응답 파라미터 `ProviderDetails`에서 `ActiveEncryptionCertificate` 값을 검색합니다. 이 인증서를 저장하고 사용자 풀의 로그인 요청에 대한 암호화 인증서로 IdP에 제공합니다.

------

## SAML 요청 서명
<a name="cognito-user-pools-SAML-signing"></a>

IdP에 대한 SAML 2.0 요청의 무결성을 증명할 수 있는 기능은 Amazon Cognito SP 시작 SAML 로그인이 가진 보안 이점입니다. 도메인이 있는 각 사용자 풀은 사용자 풀 X.509 서명 인증서를 받습니다. 이 인증서의 퍼블릭 키를 사용하면 사용자 풀은 사용자가 SAML IdP 를 선택할 때 사용자 풀이 생성하는 *로그아웃 요청*에 암호화 서명을 적용합니다. 선택적으로 SAML *로그인 요청*에 서명하도록 앱 클라이언트를 구성할 수 있습니다. SAML 요청에 서명하면 IdP는 요청의 XML 메타데이터에 있는 서명이 사용자가 제공한 사용자 풀 인증서의 퍼블릭 키와 일치하는지 확인할 수 있습니다.

------
#### [ AWS Management Console ]

**SAML 요청 서명을 구성하는 방법**

1. [사용자 풀 ](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html), [앱 클라이언트](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-configuring-app-integration.html) 및 SAML IdP를 생성합니다.

1. SAML ID 제공업체를 생성하거나 편집할 때 **요청 서명 및 응답 암호화**에서 **이 제공업체에 대한 SAML 요청 서명**이라는 제목의 확인란을 선택합니다.

1. 사용자 풀의 **소셜 및 외부 제공업체** 메뉴에서 **서명 인증서 보기**를 선택합니다.

1. **.crt로 다운로드**를 선택하고 다운로드한 파일을 SAML IdP에 제공합니다. 수신 SAML 요청의 서명을 확인하도록 SAML IdP를 구성합니다.

------
#### [ API/CLI ]

**SAML 요청 서명을 구성하는 방법**

[CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html) 또는 [UpdateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html) API 요청의 `RequestSigningAlgorithm` 파라미터를 사용하여 요청 서명을 구성합니다. 다음은 요청 서명을 지원하는 IdP의 `ProviderDetails` 예시입니다.

```
"ProviderDetails": { 
      "MetadataURL" : "https://myidp.example.com/saml/metadata",
      "IDPSignout" : "true",
      "RequestSigningAlgorithm" : "rsa-sha256",
      "EncryptedResponses" : "true",
      "IDPInit" : "true"
}
```

------

# SAML ID 제공업체 이름 및 식별자
<a name="cognito-user-pools-managing-saml-idp-naming"></a>

SAML ID 제공업체(IdPs)의 이름을 지정하고 IdP 식별자를 할당하면 SP가 시작한 로그인 및 로그아웃 요청의 흐름을 해당 제공업체에 자동화할 수 있습니다. 제공업체 이름의 문자열 제약 조건에 대한 자세한 내용은 [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html#CognitoUserPools-CreateIdentityProvider-request-ProviderName)의 `ProviderName` 속성을 참조하세요.

![\[IdP 식별자 및 관리형 로그인을 사용한 Amazon Cognito SP 시작 SAML 로그인의 인증 흐름도입니다. 사용자는 관리형 로그인에 이메일 주소를 제공하고 Amazon Cognito는 자동으로 제공업체로 리디렉션합니다.\]](http://docs.aws.amazon.com/ko_kr/cognito/latest/developerguide/images/scenario-authentication-saml-identifier.png)


또한 SAML 제공업체에 대해 최대 50개의 식별자를 선택할 수도 있습니다. 식별자는 사용자 풀의 IdP에 대한 표시 이름이며 사용자 풀 내에서 고유해야 합니다. SAML 식별자가 사용자의 이메일 도메인과 일치하는 경우 관리형 로그인은 각 사용자의 이메일 주소를 요청하고, 이메일 주소의 도메인을 평가한 다음, 해당 도메인에 해당하는 IdP로 리디렉션합니다. 같은 회사가 여러 도메인을 소유할 수 있기 때문에 단일 IdP는 여러 식별자를 가질 수 있습니다.

이메일 도메인 식별자를 사용하든 사용하지 않든 멀티 테넌트 앱에서 식별자를 사용하여 사용자를 올바른 IdP로 리디렉션할 수 있습니다. 관리형 로그인을 완전히 우회하려는 경우 [권한 부여 엔드포인트](authorization-endpoint.md)를 통해 IdP로 직접 리디렉션되도록 사용자에게 제공하는 링크를 사용자 지정할 수 있습니다. 식별자를 사용하여 사용자를 로그인하고 IdP로 리디렉션하려면 초기 권한 부여 요청의 요청 파라미터에 `idp_identifier=myidp.example.com` 형식의 식별자를 포함합니다.

사용자를 IdP로 전달하는 또 다른 방법은 다음 URL 형식의 IdP 이름으로 `identity_provider` 파라미터를 채우는 것입니다.

```
https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
identity_provider=MySAMLIdP&
client_id=1example23456789&
redirect_uri=https://www.example.com
```

사용자가 SAML IdP로 로그인하면 IdP는 `HTTP POST` 본문의 SAML 응답과 함께 `/saml2/idpresponse` 엔드포인트로 리디렉션합니다. Amazon Cognito는 SAML 어설션을 처리하고 응답의 클레임이 기대치를 충족하는 경우 앱 클라이언트 콜백 URL로 리디렉션합니다. 사용자가 이러한 방식으로 인증을 완료한 후에는 IdP 및 앱에 대한 웹페이지와만 상호 작용하게 됩니다.

도메인 형식의 IdP 식별자를 사용하면 관리형 로그인은 로그인 시 이메일 주소를 요청한 다음 이메일 도메인이 IdP 식별자와 일치하면 사용자를 IdP의 로그인 페이지로 리디렉션합니다. 예를 들어 서로 다른 두 회사의 직원이 로그인해야 하는 앱을 빌드한다고 가정해 보겠습니다. 첫 번째 회사인 AnyCompany A는 `exampleA.com` 및 `exampleA.co.uk`를 소유합니다. 두 번째 회사인 AnyCompany B는 `exampleB.com`을 소유합니다. 이 예에서는 회사마다 하나씩, 총 두 개의 IdP를 설정했습니다.
+ IdP A에는 `exampleA.com` 및 `exampleA.co.uk` 식별자를 정의합니다.
+ IdP B에는 `exampleB.com` 식별자를 정의합니다.

앱에서 앱 클라이언트에 관리형 로그인을 호출하여 각 사용자에게 이메일 주소를 입력하라는 메시지를 표시합니다. Amazon Cognito는 이메일 주소에서 도메인을 추출하고, 도메인 식별자를 사용하여 도메인을 IdP와 상호 연결한 다음 `idp_identifier` 요청 파라미터가 포함된 [권한 부여 엔드포인트](authorization-endpoint.md)에 대한 요청과 함께 사용자를 올바른 IdP로 리디렉션합니다. 예를 들어 사용자가 `bob@exampleA.co.uk`를 입력하면 상호 작용하는 다음 페이지는 `https://auth.exampleA.co.uk/sso/saml`의 IdP 로그인 페이지입니다.

동일한 로직을 독립적으로 구현할 수도 있습니다. 앱에서 사용자 입력을 수집하고 사용자 자신의 로직에 따라 올바른 IdP와 상호 연관시키는 사용자 지정 양식을 구축할 수 있습니다. 각 앱 테넌트에 대해 사용자 지정 포털을 생성할 수 있으며, 각 링크는 요청 파라미터에 테넌트의 식별자를 사용하여 권한 부여 엔드포인트에 연결됩니다.

이메일 주소를 수집하고 관리형 로그인에서 도메인을 구문 분석하려면 앱 클라이언트에 할당한 각 SAML IdP에 하나 이상의 식별자를 할당합니다. 기본적으로 관리형 로그인 화면에는 앱 클라이언트에 할당된 각 IdP에 대한 버튼이 표시됩니다. 하지만 식별자를 성공적으로 할당한 경우에는 클래식 호스팅 UI 로그인 페이지가 다음 이미지와 같이 나타납니다.

![\[로컬 사용자 로그인 및 페더레이션 사용자에게 이메일 주소를 입력하라는 메시지를 표시하는 Amazon Cognito 관리형 로그인 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/cognito/latest/developerguide/images/cup-saml-identifiers.png)


**참고**  
클래식 호스팅 UI에서 IdP에 식별자를 할당하면 앱 클라이언트의 로그인 페이지에 이메일 주소가 자동으로 표시됩니다. 관리형 로그인 환경에서는 브랜딩 편집기에서 이 동작을 활성화해야 합니다. **인증 동작** 설정 범주의 **제공업체 표시** 제목에서 **도메인 검색 입력**을 선택합니다.

관리형 로그인의 도메인 구문 분석에는 도메인을 IdP 식별자로 사용해야 합니다. 앱 클라이언트의 각 SAML IdP에 유형과 관계없이 식별자를 할당하면 해당 앱의 관리형 로그인에 더 이상 IdP 선택 버튼이 표시되지 않습니다. 이메일 구문 분석 또는 사용자 지정 로직을 사용하여 리디렉션을 생성하려는 경우 SAML에 대한 IdP 식별자를 추가합니다. 자동 리디렉션을 생성하고 관리형 로그인에 IdP 목록을 표시하려면 식별자를 할당하지 말고 권한 부여 요청에 `identity_provider` 요청 파라미터를 사용합니다.
+ 앱 클라이언트에 SAML IdP 하나만 할당하는 경우 관리형 로그인 페이지에 해당 IdP로 로그인하는 버튼이 표시됩니다.
+ 앱 클라이언트에 대해 활성화한 모든 SAML IdP에 식별자를 할당하는 경우 이메일 주소를 입력하라는 사용자 입력 프롬프트가 관리형 로그인 페이지에 표시됩니다.
+ 여러 IdP가 있고 모든 IdP에 식별자를 할당하지 않은 경우 관리형 로그인 페이지에는 할당된 각 IdP로 로그인할 수 있는 버튼이 표시됩니다.
+ IdP에 식별자를 할당했고 선택한 IdP 버튼을 관리형 로그인에 표시하고 싶다면, 식별자가 없는 새 IdP를 앱 클라이언트에 추가하거나 새 앱 클라이언트를 생성합니다. 기존 IdP를 삭제하고 식별자 없이 다시 추가할 수도 있습니다. 새 IdP를 생성하면 SAML 사용자가 새 사용자 프로필을 생성합니다. 이러한 활성 사용자 중복은 IdP 구성을 변경하는 달의 청구에 영향을 미칠 수 있습니다.

IdP 설정에 대한 자세한 내용은 [사용자 풀의 자격 증명 공급자 구성](cognito-user-pools-identity-provider.md) 섹션을 참조하세요.