사용자가 Amazon Cognito로 페더레이션할 때 발생할 수 있는 잘못된 SAML 응답 오류를 해결하려면 어떻게 해야 하나요?

7분 분량
0

사용자가 Security Assertion Markup Language 2.0(SAML 2.0)을 사용하여 Amazon Cognito로 페더레이션할 때 발생할 수 있는 오류를 해결해야 합니다.

해결 방법

Amazon Cognito는 ID 제공업체(idP) 및 SAML 2.0을 통한 인증을 지원합니다. SAML을 사용하여 Amazon Cognito로 페더레이션할 때 사용자에게 발생할 수 있는 일반적인 오류가 있습니다.

참고: 전체에서 **<attribute_name>**을 오류 시나리오의 사용자 속성으로 바꾸세요.

SAML 응답 보기

일반적인 SAML 페더레이션 오류를 해결하려면 IdP에서 Amazon Cognito 사용자 풀로 전송된 SAML 응답을 확인하세요. SAML 응답을 캡처하고 디코딩하는 방법에 대한 지침은 브라우저에서 SAML 응답 보기를 참조하세요.

참고: SAMLResponse 요소에는 base64로 인코딩된 요청이 포함되어 있습니다. 문자가 있는 페이로드는 페이로드가 base64 외에 URL로 인코딩되었음을 나타냅니다. base64 디코딩을 위해 보내기 전에 SAMLResponse 값에 대해 URL 디코딩을 수행합니다.

잘못된 SAML 응답 오류 해결

“잘못된 SAML 응답을 받았습니다. 잘못된 사용자 속성: <attribute_name>: 속성은 필수입니다.“

이 오류는 사용자 풀이 필수 속성으로 구성되었지만 IdP가 필수 속성에 대한 클레임을 전달하지 않을 때 발생합니다. 이 오류는 필수 속성에 속성 매핑을 사용할 수 없는 경우에도 발생합니다.

오류를 해결하려면 다음 단계를 따르세요.

1.    Amazon Cognito 콘솔을 엽니다.

2.    사용자 풀을 선택합니다.

3.    사용자 풀에 대한 정보를 검토합니다. 가입 환경에서 구성된 필수 속성을 기록해 둡니다.

4.    브라우저에서 SAML 응답을 검색하고 검토합니다.

5.    IdP가 응답의 AttributeStatement 필드에 있는 모든 필수 속성 클레임을 전달하고 있는지 확인합니다. IdP가 SAML 응답에 모든 필수 속성을 보내지 않는다면, IdP의 속성 매핑 구성을 검토하세요. 필수 속성에 대한 올바른 매핑을 보내도록 IdP가 구성되어 있는지 확인하세요.

참고: IdP에서 참조용으로 샘플 SAML 어설션을 제공할 수 있습니다. 어설션을 확인하여 IdP의 매핑된 속성에 대한 자세한 내용을 확인할 수 있습니다. 일부 IdP는 이메일 주소와 같은 간단한 이름을 속성 매핑에 사용하는 반면, 다른 IdP는 다음 예와 비슷한 URL 형식의 속성 이름을 사용합니다.

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

6.SAML 응답에 필수 속성이 포함되었는데도 여전히 동일한 오류가 발생하는 경우 Amazon Cognito 속성 매핑을 확인하세요. 필수 속성에 대한 매핑이 누락된 경우 속성 클레임에 매핑을 추가하세요. 속성 매핑을 추가하는 방법에 대한 지침은 사용자 풀에 대한 ID 제공자 속성 매핑 지정을 참조하세요.

“잘못된 SAML 응답을 받았습니다. 잘못된 사용자 속성: <attribute_name>: 필수 속성은 삭제할 수 없습니다.“

이 오류는 IdP에서 필수 속성이 변경되어 필수 속성이 null이거나 삭제될 때 발생합니다. 이 오류는 사용자를 생성한 후 매핑을 제거할 때도 발생합니다.

오류를 해결하려면 다음 단계를 따르세요.

1.    Amazon Cognito 콘솔을 엽니다.

2.    Amazon Cognito 사용자 풀 ID를 사용합니다.

3.    사용자 풀에 대한 정보를 검토합니다. 구성된 필수 속성을 기록해 둡니다.

4.    브라우저에서 SAML 응답을 검색하고 검토합니다.

5.    IdP가 응답의 AttributeStatement 필드에 있는 모든 필수 속성 클레임을 전달하는지 확인합니다. IdP가 SAML 응답에서 필요한 속성을 모두 전송하지 않는 경우 IdP의 속성 매핑 구성을 검토하세요. 올바른 매핑과 함께 필수 속성을 보내도록 IdP가 설정되어 있는지 확인하세요.

6.    모든 필수 속성이 SAML 응답에서 유효한 값과 함께 전달되면 IdP 특성 매핑을 확인하세요. 모든 필수 속성에 대한 매핑이 있는지 확인하세요.

**참고:**IdP의 필수 속성을 삭제하거나 null로 변경한 후 페더레이션 요청 중에 다음 오류가 발생할 수 있습니다. **“잘못된 SAML 응답을 받았습니다. 잘못된 사용자 속성: <attribute_name>: 필수 속성은 삭제할 수 없습니다.“**이 오류는 사용자를 생성한 후 매핑을 제거할 때도 발생합니다. 이 오류를 해결하려면 이전 단계에 따라 필수 속성에 대한 매핑이 존재하는지 확인하세요. 그러면 IdP에서 필수 속성에 대한 올바른 값이 전달됩니다.

“잘못된 SAML 응답을 받았습니다. 잘못된 사용자 속성: <attribute_name>: 속성을 업데이트할 수 없습니다.“

이 오류는 속성이 IdP에서 전달되었지만 매핑된 Amazon Cognito 속성이 변경 불가능(“변경 가능”: “false”)으로 설정된 경우 발생합니다. 사용자 풀을 생성한 후에는 속성의 변경 가능성 설정을 변경할 수 없습니다. 이 오류를 해결하려면 SAML 속성을 변경 불가능한 속성에 매핑하는 속성 매핑 규칙을 제거해야 합니다.

오류를 해결하려면 다음 단계를 따르세요.

1.다음 AWS Command Line Interface(AWS CLI) 명령을 실행하고 출력에 반환된 속성을 기록해 둡니다. 출력에 반환되는 모든 속성은 변경할 수 없습니다.

참고: 사용자 풀 ID로 **<userpool_id>**를 교체합니다.

aws cognito-idp describe-user-pool --user-pool-id <userpool_id> --query 'UserPool.SchemaAttributes[?Mutable==`false`].Name'

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

2.    Amazon Cognito 콘솔을 엽니다.

3.    공급자의 SAML 속성 매핑을 검토하세요.

4.    명령 출력에 반환된 Amazon Cognito 속성에 매핑된 SAML 속성이 있는지 확인합니다. 변경 불가능한 속성에 대한 매핑이 있는 경우, 해당 매핑을 삭제하세요. 해당 SAML 속성을 매핑해야 하는 경우, 기존 변경 가능한 속성에 매핑하세요. 사용자 지정 변경 가능 특성을 만들고 SAML 특성을 사용자 지정 변경 가능 속성에 매핑할 수도 있습니다.

매핑된 속성이 필요하기 때문에 기존 사용자 풀에서 매핑을 삭제할 수 있는 해결 방법은 없습니다. 필수 변경 설정을 사용하여 새 사용자 풀을 만들고 사용자를 새 사용자 풀로 마이그레이션해야 합니다.

“잘못된 SAML 응답을 받았습니다. SAML 응답 서명이 잘못되었습니다.“

이 오류는 IdP가 SAML 서명 인증서를 변경할 때 발생합니다. 이 문제를 해결하려면 Amazon Cognito로 페더레이션할 때 받는 SAML 응답을 검토하세요. X509Certificate 인증서 필드에 제공된 값을 기록해 둡니다. SAML 응답의 이 X509Certificate 값을 IdP 구성을 위해 Amazon Cognito에 업로드된 메타데이터 XML 파일의 X509Certificate 값과 비교하세요. 값이 다르면 IdP에서 사용하는 SAML 서명 인증서가 업데이트되었음을 의미합니다.

오류를 해결하려면 다음 단계를 따르세요.

1.IdP의 애플리케이션 구성 페이지로 이동한 다음 업데이트된 메타데이터 파일을 가져옵니다.

2.    Amazon Cognito 콘솔을 엽니다.

3.    SAML IdP의 구성으로 이동합니다.

4.    기존 메타데이터 파일을 업데이트된 메타데이터 파일로 바꿉니다.
-또는-
IdP가 공개 URL을 통해 SAML 메타데이터를 제공하는 경우 메타데이터 문서 URL을 복사합니다. 메타데이터 파일을 업로드하는 대신 해당 공개 URL을 붙여넣습니다.

“잘못된 SAML 응답을 받았습니다. SAML 어설션의 잠재고객 제한으로 인해 urn:amazon:cognito:sp:xxxxxxxxxxxx에는 사용할 수 없습니다.“
-또는-
“잘못된 SAML 응답을 받았습니다. 식별자가 'urn:amazon:cognito:sp:xxxxxxxxx'인 애플리케이션을 찾을 수 없습니다.“

**참고:**오류 메시지는 IdP에 따라 달라집니다.

이 오류는 IdP에서 개체 ID를 잘못 구성한 경우 발생합니다. 이 오류는 다른 사용자 풀의 URN을 개체 ID로 사용하는 경우에도 발생합니다.

오류를 해결하려면 다음 단계를 따르세요.

1.    Amazon Cognito 콘솔을 엽니다.

2.    사용자 풀을 선택한 다음 사용자 풀 ID를 기록해 둡니다.

3.    IdP의 SAML 애플리케이션 설정으로 이동한 후 다음 형식으로 개체 ID를 구성합니다.

참고: **<user_pool_id>**를 Amazon Cognito 사용자 풀 ID로 교체하세요.

urn:amazon:cognito:sp:<user_pool_id>

“요청된 페이지에서 오류가 발생했습니다.“

이 오류는 Amazon Cognito 호스팅 UI 페이지에서 발생합니다. 이 오류 메시지에 다른 오류 설명이 없으면 Assertion Consumer Service(ACS) URL이 잘못 구성되었음을 나타냅니다. IdP는 ACS URL을 사용하여 Amazon Cognito에 SAML 응답을 보냅니다. ACS URL은 다음 형식을 따릅니다.

참고: **<your_user_pool_domain>**을 사용자 풀 도메인으로 교체합니다.

https://<your_user_pool_domain>/saml2/idpresponse

Amazon Cognito는 엔드포인트에 대한 POST 바인딩만 지원합니다. IdP는 POST 요청의 SAML 응답을 엔드포인트로 보내야 합니다. IdP의 애플리케이션에서 이 URL을 잘못 구성하면 IdP가 잘못된 엔드포인트로 SAML 응답을 보냅니다. 그 결과 400 오류와 페더레이션 실패가 발생합니다.

오류를 해결하려면 다음 단계를 따르세요.

1.    IdP의 애플리케이션 구성으로 이동하고 다음 형식 중 하나를 사용하여 ACS URL을 설정합니다.

Cognito 도메인:

https://<your_user_pool_domain>.auth.<region>.amazoncognito.com/saml2/idpresponse

맞춤 도메인:

https://<your_user_pool_domain>/saml2/idpresponse

“요청된 페이지에서 오류가 발생했습니다. ID 공급자의 릴레이 상태가 잘못되었습니다.“
-또는-
“요청된 페이지에서 오류가 발생했습니다. ID 공급자의 SAML samlResponse 또는 relayState가 잘못되었습니다.“

이 오류는 다음과 같은 이유로 발생합니다.

  • RelayState 파라미터는 SAML 응답이 Amazon Cognito로 전송될 때 IdP에 의해 null로 설정됩니다.
  • SAML 요청의 ACS URL은 IdP의 애플리케이션에 구성된 ACS URL과 동일하지 않습니다.

Amazon Cognito는 인증 요청을 IdP에 전달할 때 RelayState 파라미터를 생성합니다. 이 RelayState 파라미터는 성공적으로 인증된 후 IdP에서 Amazon Cognito에 반환해야 합니다.

SAML 페더레이션 중에는 사용자 풀이 애플리케이션을 대신하여 서비스 공급자 역할을 합니다. Amazon Cognito는 서비스 공급자로서 서비스 공급자가 시작한 싱글 사인온(SSO) 흐름만 지원합니다. IdP 개시 흐름은 지원되지 않습니다. IdP에서 페더레이션 요청이 시작되면 IdP의 필수 속성이 삭제되거나 null로 변경됩니다. 페더레이션 실패는 앞서 언급한 오류 메시지를 포함하는 결과입니다.

이 오류를 해결하려면 IdP 대신 Amazon Cognito에서 페더레이션 요청을 시작하세요. Amazon Cognito에서 페더레이션을 시작하려면 다음 단계 중 하나를 수행하여 인증 흐름을 시작하세요.

  • 로그인을 위해 사용자를 /login 엔드포인트로 리디렉션합니다. /login 엔드포인트는 로그인 페이지를 로드하고 사용자에게 클라이언트 인증 옵션을 제공합니다. 사용자가 애플리케이션에 로그인하고 IdP로 리디렉션하기 위해 다양한 옵션을 확인해야 하는 경우, /login 엔드포인트에 연결하세요.
  • Amazon Cognito의 /oauth2/authorize 엔드포인트로 요청을 전송합니다. /oauth2/authorize 엔드포인트는 두 개의 리디렉션 대상을 지원하는 리디렉션 엔드포인트입니다. URL에 ID\ _provider 또는 idp\ _identifier 매개변수를 포함하면 사용자가 IdP의 로그인 페이지로 원활하게 리디렉션됩니다. 이 옵션을 사용하면 호스팅된 UI의 기본 레이아웃을 건너뛰고 IdP 페이지로 직접 리디렉션될 수 있습니다.

이 오류는 동일한 IdP 애플리케이션에 대한 페더레이션 요청이 다른 사용자 풀에서 온 경우 ACS URL이 다른 경우에도 발생합니다. 다음 단계에 따라 오류를 조사하고 해결하세요.

1.    Amazon Cognito에 페더레이션할 때 HTTP 아카이브(HAR) 파일을 캡처하세요.

2.    브라우저의 네트워크 탭에서 saml?SamlRequest이 포함된 요청을 찾은 다음 요청을 엽니다.

3.요청 파라미터에 제공된 SAMLRequest를 복사합니다.

4.    선호하는 SAML 디코딩 도구를 사용하여 SAMLRequest를 디코딩합니다. ** ** 그런 다음 SAMLRequest에서 전송된 ACS URL이 IdP의 애플리케이션에 설정된 것과 동일한지 확인합니다.

**SAMLRequest ** 값이 서로 다른 경우 오류가 확인됩니다.

5.    오류를 해결하려면 IdP 구성을 확인하세요. 애플리케이션에 설정된 ACS URL이 SAMLRequest에서 전송된 ACS URL과 동일한지 확인하세요.

다른 사용자 풀에서 동일한 IdP 애플리케이션에 대해 페더레이션 요청이 생성되면 ACS URL이 달라집니다. 적절한 사용자 풀에서 페더레이션 요청을 시작해야 합니다.

AWS 공식
AWS 공식업데이트됨 일 년 전