Amazon Cognito 사용자 풀 SAML IdP에 대해 알아야 할 사항
SAML 2.0 IdP 구현에는 몇 가지 요구 사항 및 제한 사항이 있습니다. IdP를 구현할 때 이 섹션을 참조하세요. 또한 사용자 풀을 사용한 SAML 페더레이션 중에 오류를 해결하는 데 유용한 정보를 찾을 수 있습니다.
- Amazon Cognito가 SAML 어설션을 처리합니다.
-
Amazon Cognito 사용자 풀은 사후 바인딩 엔드포인트와의 SAML 2.0 페더레이션을 지원합니다. 이렇게 하면 사용자 풀이 사용자 에이전트를 통해 IdP로부터 직접 SAML 응답을 받으므로 앱에서 SAML 어설션 응답을 검색하거나 구문 분석할 필요가 없습니다. 사용자 풀은 애플리케이션을 대신하여 서비스 공급자(SP) 역할을 합니다. Amazon Cognito는 SAML V2.0 기술 개요
의 섹션 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
파라미터를 사용하여 세션 정보를 유지 관리합니다.-
Amazon Cognito는 80바이트보다 큰
relayState
값을 지원합니다. SAML 사양에는relayState
값의 "길이가 80바이트를 초과해서는 안 된다"고 명시되어 있지만, 현재 업계 관행은 이 동작에서 벗어나는 경우가 많습니다. 결과적으로 80바이트보다 큰relayState
값을 거부하면 많은 표준 SAML 공급자 통합이 중단됩니다. -
relayState
토큰은 Amazon Cognito Cognito에서 유지 관리하는 상태 정보에 대한 불투명한 참조입니다. Amazon Cognito는relayState
파라미터의 내용을 보장하지 않습니다. 앱이 결과에 따라 달라지도록 내용을 구문 분석하지 마세요. 자세한 내용은 SAML 2.0 사양을 참조하세요.
-
- ACS 엔드포인트 식별
-
SAML 자격 증명 공급자에 어설션 소비자 엔드포인트를 설정해야 합니다. IdP는 SAML 어설션을 통해 사용자를 이 엔드포인트로 리디렉션합니다. SAML ID 제공업체의 SAML 2.0 POST 바인딩에 대해 사용자 풀 도메인에서 다음 엔드포인트 구성합니다.
https://
Your user pool domain
/saml2/idpresponse With an Amazon Cognito domain: https://mydomain.us-east-1.amazoncognito.com
/saml2/idpresponse With a custom domain: https://auth.example.com
/saml2/idpresponse사용자 풀 도메인에 대한 자세한 정보는 사용자 풀 도메인 구성 단원을 참조하세요.
- 재생된 어설션 없음
-
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 콘솔
의 사용자 풀 개요에서 사용자 풀 ID를 찾을 수 있습니다. - 모든 필수 속성 매핑
-
SAML IdP에서 사용자 풀에 필요한 대로 설정한 속성에 대한 속성 값도 제공하도록 구성해야 합니다. 예를 들어
email
은 사용자 풀의 일반적인 필수 속성입니다. 사용자가 로그인하려면 먼저 SAML IdP 어설션에 사용자 풀 속성email
에 매핑되는 클레임이 포함되어야 합니다. 속성 매핑에 대한 자세한 내용은 프로필 및 토큰에 IdP 속성 매핑을 참조하십시오. - 어설션 형식에는 특정 요구 사항이 있습니다.
-
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
의 IdPNameID
클레임에서Format
은 IdP가 변경되지 않는 값을 전달하고 있음을 나타냅니다. Amazon Cognito는 이 형식 선언을 필요로 하지 않으며, IdP가NameID
클레임의 형식을 지정하지 않는 경우urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
형식을 할당합니다. 이 동작은 SAML 2.0 사양의 섹션 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.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.us-east-1.amazoncognito.com
/saml2/idpresponse"/>
-
- SP가 시작한 로그인 요청
-
권한 부여 엔드포인트에서 사용자를 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 요청을 무시할 수 있습니다.
-
Amazon Cognito는 사용자가 IdP 에 전달하는 SAML 요청에 디지털 서명을 적용합니다. 사용자 풀은 모든 단일 로그아웃(SLO) 요청에 서명하며, 모든 SAML 외부 IdP 에 대한 Single Sign-On(SSO) 요청에 서명하도록 사용자 풀을 구성할 수 있습니다. 인증서 사본을 제공하면 IdP가 사용자 SAML 요청의 무결성을 확인할 수 있습니다.
-
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 인증서란?섹션을 참조하십시오. - IdP가 시작된 SAML이 있는 앱 클라이언트는 SAML로만 로그인할 수 있습니다.
-
앱 클라이언트에서 IdP 시작 서명을 지원하는 SAML 2.0 IdP에 대한 지원을 활성화할 경우 해당 앱 클라이언트에 다른 SAML 2.0 IdP만 추가할 수 있습니다. 이러한 방식으로 구성된 앱 클라이언트에 사용자 풀의 사용자 디렉터리 및 모든 비SAML 외부 ID 제공업체를 추가할 수 없습니다.
- 로그아웃 응답은 POST 바인딩을 사용해야 합니다.
-
/saml2/logout
엔드포인트는LogoutResponse
를HTTP POST
요청으로 수락합니다. 사용자 풀은HTTP GET
바인딩이 있는 로그아웃 응답을 수락하지 않습니다.