SAML 문제 해결

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

이 페이지에는 다음을 사용할 때 발생할 수 있는 문제에 대한 가능한 해결책이 포함되어 있습니다:

SAML 디버깅 도구

SAML 응닑은 base64로 인코딩되므로 이를 실시간으로 디코딩할 수 있는 다음과 같은 브라우저 플러그인을 권장합니다:

특히 다음 사항에 유의하세요:

  • 사용자를 식별하는 데 사용하는 NameID. 사용자가 이전에 로그인한 경우, 이 값은 저장된 값과 일치해야 합니다.
  • 응답 서명을 검증하기 위해 필요한 X509Certificate의 존재.
  • SubjectConfirmationConditions의 구성 오류가 발생할 수 있는 경우에 대한 주의.

SAML 응답 생성

아이덴티티 제공자를 사용하여 로그인을 시도할 때 단언 목록에 전송된 속성 이름과 값 미리보기에 SAML 응닑을 사용하세요.

SAML 응답을 생성하려면:

  1. 브라우저 디버깅 도구 중 하나를 설치하세요.
  2. 새 브라우저 탭을 엽니다.
  3. SAML 추적기 콘솔을 엽니다:
    • Chrome: 페이지에서 콘텍스트 메뉴에서 검사를 선택한 후 열린 개발자 콘솔에서 SAML 탭을 선택하세요.
    • Firefox: 브라우저 툴바에 있는 SAML 추적기 아이콘을 선택하세요.
  4. SAML 추적기가 열려 있는 동일한 브라우저 탭에서 GitLab 단일 로그인 URL로 이동하세요.
  5. 승인을 선택하거나 로그인을 시도하세요. SAML 응닑이 추적기 콘솔에 표시되며 이 예제 SAML 응답과 유사합니다.
  6. SAML 추적기에서 내보내기 아이콘을 선택하여 응닑을 JSON 형식으로 저장하세요.

GitLab SAML 테스트

다음 중 하나를 사용하여 SAML을 문제 해결할 수 있습니다:

구성 확인

편의를 위해 지원 팀이 사용하는 일부 예제 리소스를 포함했습니다. 이 리소스는 SAML 앱 구성을 확인하는 데 도움이 될 수 있지만, 제 3자 제품의 현재 상태를 정확히 반영하지는 않을 수 있습니다.

지문 계산

idp_cert_fingerprint를 사용하는 경우 SHA1 지문이어야 합니다. SHA1 지문을 계산하려면 인증서 파일을 다운로드하고 다음을 실행하세요:

openssl x509 -in <filename.crt> -noout -fingerprint -sha1

filename.crt를 인증서 파일의 이름으로 바꿔주세요.

SSO 인증서 업데이트

아이덴티티 제공자에 사용된 인증서가 변경(예: 인증서 갱신 또는 업데이트)된 경우 인증서 지문도 업데이트해야 합니다. 인증서 지문은 아이덴티티 제공자의 UI에서 찾을 수 있습니다. 아이덴티티 제공자 UI에서 인증서를 얻을 수 없는 경우 지문 계산 문서의 단계를 따르세요.

SAML 응답을 위한 Rails 로그 검색

Tier: Free, Premium, Ultimate Offering: Self-managed, GitLab Dedicated

production_json.log에서 base64로 인코딩된 SAML 응답을 찾을 수 있습니다. 이 응답은 아이덴티티 제공자에서 보내며, GitLab에서 사용하는 사용자 정보가 포함되어 있습니다. SAML 통합에서 발생하는 많은 오류는 이 응답을 디코딩하고 GitLab 구성 파일의 SAML 설정과 비교하여 해결할 수 있습니다.

예를 들어 그룹용 SAML에서 다음과 같은 필터로 검색하여 base64로 인코딩된 SAML 응답을 찾을 수 있습니다:

  • json.meta.caller_id: Groups::OmniauthCallbacksController#group_saml
  • json.meta.user 또는 json.username: 사용자 이름
  • json.method: POST
  • json.path: /groups/GROUP-PATH/-/saml/callback

관련 로그 항목에서 json.params는 다음을 제공해야 합니다:

  • "key": "SAMLResponse""value": (전체 SAML 응답)",
  • "key": "RelayState""value": "/group-path", 그리고
  • "key": "group_id""value": "group-path".

고객이 SAML 그룹 동기화를 구성한 경우 다음과 같은 필터로 디코딩된 SAML 응답을 확인해야 합니다:

  • json.class: GroupSamlGroupSyncWorker
  • json.args: <사용자 ID> 또는 <그룹 ID>

관련 로그 항목에서:

  • json.args<사용자 ID>, <그룹 ID>, [그룹 링크 ID 1, 그룹 링크 ID 2, ..., 그룹 링크 ID N] 형식으로 표시됩니다.
  • json.extra.group_saml_group_sync_worker.stats.* 필드는 그룹 동기화 실행이 사용자의 멤버십을 얼마나 많이 추가, 제거, 변경했는지를 보여줍니다.

일부 경우에는 SAML 응답이 긴 경우 "key": "truncated""value":"..."를 받을 수 있습니다. 이러한 경우 SAML 디버깅 도구 또는 그룹 소유자는 “SAML 구성 검증” 버튼을 선택했을 때 SAML 응답의 사본을 받을 수 있습니다.

SAML 응답을 읽기 쉬운 형식으로 보려면 base64 디코더를 사용하세요. 온라인에서 응답을 디코딩하려면 응답을 붙여넣기하지 않고 브라우저의 콘솔을 사용할 수 있습니다:

atob(decodeURI("<여기에 SAML 응답 붙여넣기>")

MacOS에서는 다음을 실행하여 클립보드 데이터를 디코딩할 수 있습니다:

pbpaste | base64 -D

출력으로 XML 형식의 SAML 응닑을 얻을 수 있어야 합니다.

구성 오류

잘못된 대상 청중

이 오류는 식별 공급자가 GitLab을 유효한 송신자 및 SAML 요청 수신자로 인식하지 못하는 것을 의미합니다. 다음을 확인하세요:

  • GitLab 콜백 URL을 식별 공급자 서버의 승인된 청중에 추가합니다.
  • 발행자 문자열에서 후행 공백을 피합니다.

키 유효성 검사 오류, 다이제스트 불일치 또는 지문 불일치

이러한 오류는 모두 SAML 인증서에서 비롯됩니다. SAML 요청은 지문, 인증서 또는 유효성 검사기를 사용하여 유효성을 검사해야 합니다.

이 요구 사항에 대해 다음 사항을 반드시 고려하십시오:

  • 지문을 사용하는 경우 올바른 SHA1 지문이어야 합니다. 올바른 SHA1 지문을 사용하는지 확인하려면:
    1. 인증서 파일을 다시 다운로드합니다.
    2. 지문을 계산합니다.
    3. 계산된 지문을 idp_cert_fingerprint에서 제공된 값과 비교합니다. 값은 동일해야 합니다.
  • 설정에서 인증서가 제공되지 않은 경우 지문 또는 지문 유효성 검사기를 제공해야 하며 서버 응답에는 인증서(<ds:KeyInfo><ds:X509Data><ds:X509Certificate>)가 포함되어야 합니다.
  • 설정에서 인증서가 제공된 경우 요청에 인증서가 더 이상 포함되어 있을 필요가 없습니다. 이 경우 지문 또는 지문 유효성 검사기가 선택 사항입니다.

위에 설명된 시나리오 중 어느 것도 유효하지 않으면 요청이 해당 오류 중 하나로 실패합니다.

누락된 클레임 또는 이메일을 비워둘 수 없음 오류

식별 공급자 서버는 GitLab이 계정을 생성하거나 로그인 정보를 기존 계정과 일치시키기 위해 특정 정보를 전달해야 합니다. 이메일은 전달해야 하는 최소한의 정보입니다. 식별 공급자 서버가이 정보를 제공하지 않으면 모든 SAML 요청이 실패합니다.

이 정보가 제공되도록 확인하십시오.

이 오류의 다른 문제는 식별 공급자가 올바른 정보를 보내고 있지만 속성이 OmniAuth info 해시의 이름과 일치하지 않을 때 발생합니다. 이 경우 SAML 구성에서 attribute_statements를 설정하여 SAML 응답 속성 이름을 해당 OmniAuth info 해시 이름에 매핑해야 합니다.

사용자 로그인 배너 오류 메시지

메시지: “SAML 인증 실패: 외부 UID가 이미 사용 중입니다”

이 오류는 GitLab 사용자로서 로그인한 후 SAML ID를 이미 다른 GitLab 사용자에 연결했음을 나타냅니다. 로그아웃한 다음 SAML을 사용하여 다시 로그인하면 연결된 사용자 계정으로 GitLab에 로그인됩니다.

SAML 로그인을 사용하지 않으려면 GitLab 계정을 SAML 앱에서 연결 해제할 수 있습니다.

메시지: “SAML 인증 실패: 사용자가 이미 사용 중입니다”

사용자는 이미 다른 ID에 SAML이 연결되어 있거나 NameID 값이 변경되었습니다. 가능한 원인과 해결책은 다음과 같습니다.

원인 해결책
주어진 ID 공급자에 대해 동일한 사용자에게 여러 SAML ID가 연결을 시도했습니다. 로그인하는 ID를 변경하세요. 이를 위해 먼저 이전 SAML ID를 이 계정에서 해제한 후 다시 로그인을 시도하십시오.
사용자가 SSO 식별을 요청할 때마다 NameID가 변경됩니다. NameID를 확인하여 Transient 형식으로 설정되지 않았는지 또는 반복적인 요청에서 NameID가 변경되지 않았는지 확인하십시오.

메시지: “SAML 인증 실패: 이메일이 이미 사용 중입니다”

원인 해결책
GitLab에 이미 이메일 주소가있는 사용자 계정이 있지만 사용자에게 SAML ID가 계정에 연결되어 있지 않은 경우. 사용자는 계정을 연결해야 합니다.

사용자 계정은 다음 중 하나의 방법으로 생성됩니다:

  • 사용자 등록
  • OAuth를 통한 로그인
  • SAML을 통한 로그인
  • SCIM 프로비저닝

메시지: “SAML 인증 실패: 외부 UID가 이미 사용 중입니다. 사용자가 이미 사용 중입니다.”

이 두 오류를 동시에 받는 것은 식별 공급자가 해당 사용자의 이전 값과 정확히 일치하지 않는 NameID 대문자화를 제공했음을 나타냅니다.

개별 사용자의 경우이 문제를 해결하려면 사용자의 식별자를 변경해야 합니다. GitLab.com의 경우 사용자는 GitLab 계정에서 SAML을 해제해야 합니다.

메시지: “SAML 계정을 링크하는 요청은 승인되어야 합니다”

GitLab 계정을 연결하려는 사용자가 ID 공급자의 SAML 앱에 사용자로 추가되었는지 확인하십시오.

대안으로 SAML 응답에는 SAML 젬에서 예상되는 samlp:Response 태그 내의 InResponseTo 속성이 누락되었을 수 있습니다. 식별 공급자 관리자는 로그인이 식별 공급자에 의한 것뿐만 아니라 서비스 제공자에 의해 시작되었음을 보장해야 합니다.

메시지: “이 이메일 주소에 연결된 GitLab 계정이 이미 있습니다. 기존 자격 증명으로 로그인하여 귀하의 조직 계정을 연결하세요”

Tier: 프리미엄, 얼티메이트 Offering: GitLab.com

사용자는 기존 GitLab.com 계정에 SAML 수동 연결을 시도할 때 이 메시지를 볼 수 있습니다.

이 문제를 해결하려면, 사용자는 올바른 GitLab 암호를 사용하고 있는지 확인해야 합니다. 사용자는 다음과 같을 때 먼저 암호를 재설정해야 합니다:

  • 계정이 SCIM에 의해 프로비저닝되었던 경우
  • 사용자가 첫 번째로 사용자 이름과 암호로 로그인하는 경우

메시지: “SAML Name ID 및 이메일 주소가 사용자 계정과 일치하지 않습니다”

Tier: 프리미엄, 얼티메이트 Offering: GitLab.com

사용자가 “SAML Name ID 및 이메일 주소가 사용자 계정과 일치하지 않습니다. 관리자에게 문의하세요.”라는 오류 메시지를 받을 수 있습니다. 이는 다음을 의미합니다:

  • SAML에 의해 전송된 NameID 값이 기존 SAML 식별 extern_uid 값과 일치하지 않음을 의미합니다. NameID 및 extern_uid는 대소문자를 구분합니다. 자세한 정보는 사용자 SAML 식별 관리를 참조하십시오.
  • SAML 응답이 이메일 주소를 포함하지 않았거나 이메일 주소가 사용자의 GitLab 이메일 주소와 일치하지 않았을 수 있습니다.

이 문제를 해결하기 위해 GitLab 그룹 소유자는 SAML API를 사용하여 사용자의 SAML extern_uid를 업데이트해야 합니다. extern_uid 값은 SAML 식별 공급자(IdP)가 전송한 Name ID 값과 일치해야 합니다. IdP 구성에 따라 고유 ID, 이메일 주소 또는 기타 값을 나타낼 수 있습니다.

메시지: “응답에 인증서 요소가 누락되었습니다 (ds:x509certificate) 및 설정에서 인증서가 제공되지 않았습니다”

이 오류는 IdP가 SAML 응답에 X.509 인증서를 포함하도록 구성되지 않았음을 나타냅니다. 응답에 X.509 인증서를 포함해야 합니다.

이 문제를 해결하려면 IdP를 구성하여 SAML 응답에 X.509 인증서를 포함하도록 합니다.

자세한 정보는 IdP에서 SAML 앱에 대한 추가 구성 문서를 참조하십시오.

기타 사용자 로그인 문제

NameID 확인

문제 해결 시, 인증된 사용자는 모두 API를 사용하여 GitLab이 이미 사용자에게 연결한 NameID를 확인할 수 있으며, identities 하위에 있는 extern_uid를 확인할 수 있습니다.

자체 관리형 시스템의 경우, 관리자는 사용자 API를 사용하여 동일한 정보를 볼 수 있습니다.

그룹에서 SAML을 사용하는 경우, 적절한 권한을 가진 역할의 그룹 구성원은 멤버 API를 사용하여 그룹 구성원의 그룹 SAML 식별 정보를 볼 수 있습니다.

그런 다음 이것을 SAML 디버깅 도구를 사용하여 메시지를 디코딩함으로써 식별 공급자가 보내는 NameID와 일치하는지 확인할 수 있습니다. 사용자를 식별하기 위해 두 값이 일치하여야 합니다.

로그인 “루프”에 갇힌 경우

GitLab 단일 로그인 URL(GitLab.com의 경우) 또는 인스턴스 URL(자체 관리형의 경우)이 식별 공급자의 SAML 앱의 “로그인 URL” (또는 유사한 필드)로 구성되었는지 확인하십시오.

GitLab.com의 경우, 사용자가 기존 GitLab.com 계정에 SAML을 연결해야 하는 경우, 처음 로그인할 때 SAML 앱을 사용하지 않도록 하고 GitLab 단일 로그인 URL을 제공하고 사용자에게 해당 URL을 사용하지 말라고 지시합니다.

사용자가 404를 수신함

Tier: 프리미엄, 얼티메이트 Offering: GitLab.com

사용자가 성공적으로 로그인한 후 404를 받는 경우, IP 제한이 구성되었는지 확인하십시오. IP 제한 설정은 다음 위치에 구성됩니다:

그룹용 SAML SSO가 유료 기능이므로, GitLab.com에서 SAML SSO를 사용하여 로그인 시 구독이 만료되면 404 오류가 발생할 수 있습니다. SAML을 사용하여 로그인할 때 모든 사용자가 404를 받는 경우, 이 SAML SSO 네임스페이스에서 활성 구독이 있는지 확인하십시오.

“SAML 구성 검증” 중에 404를 수신하는 경우, 올바른 SHA-1 생성 지문을 사용했는지 확인하십시오.

사용자가 처음으로 로그인을 시도하고 GitLab 단일 로그인 URL이 구성되지 않은 경우 404를 볼 수 있습니다. 사용자 접근 섹션에서 설명한 대로, 그룹 소유자가 사용자에게 해당 URL을 제공해야 합니다.

최상위 그룹이 이메일 도메인으로 멤버십을 제한했거나, 허용되지 않는 이메일 도메인으로 로그인을 시도하는 사용자가 있다면 사용자가 404를 받을 수 있습니다. 사용자는 여러 계정을 가진 경우이며, 그들의 SAML 식별이 회사 도메인과 다른 이메일 주소를 가진 개인 계정에 연결될 수 있습니다. 이를 확인하려면 다음을 확인하십시오:

  • 최상위 그룹이 이메일 도메인으로 멤버십을 제한했는지 확인하십시오.
  • 최상위 그룹의 감사 이벤트에서:
    • 해당 사용자의 그룹 SAML 인증으로 로그인됨 동작을 볼 수 있는지 확인하십시오.
    • 사용자의 사용자 이름이 SAML SSO에 구성한 사용자 이름과 동일한지 선택하여 작성자 이름을 선택하여 확인하십시오.
      • 사용자 이름이 SAML SSO에 구성한 사용자 이름과 다른 경우, 사용자에게 SAML 식별 해제를 요청하십시오.

사용자가 IdP에 로그인한 후 404를 받는 경우:

일부 사용자가 IdP에 로그인한 후 404를 받는 경우, 사용자가 그룹에 추가되고 즉시 삭제되는 것을 확인하려면 감사 이벤트를 먼저 확인하십시오. 대안으로 사용자가 성공적으로 로그인할 수 있지만 최상위 그룹의 구성원으로 표시되지 않는 경우:

  • 사용자가 SAML 식별 공급자에 추가되었는지 및 SCIM이 구성되어 있는지 확인하십시오.
  • SCIM API를 사용하여 사용자의 SCIM 식별의 active 속성이 true인지 확인하십시오. active 속성이 false인 경우 이슈를 해결하기 위해 다음 중 하나를 시도할 수 있습니다:
    • SCIM 식별 공급자에서 사용자의 동기화를 트리거합니다. 예를 들어, Azure에는 “요청에 따라 프로비저닝” 옵션이 있습니다.
    • SCIM 식별 공급자에서 사용자를 제거하고 다시 추가하십시오.
    • 사용자가 가능한 경우 계정을 연결 해제한 다음 계정을 연결하십시오.
    • 내부 SCIM API를 사용하여 귀하의 그룹의 SCIM 토큰을 사용하여 사용자의 SCIM 식별을 업데이트하십시오. 그룹의 SCIM 토큰을 모르는 경우, 토큰을 재설정하고 새 토큰으로 SCIM 식별 공급자 앱을 업데이트하십시오. 예시 요청:
curl --request PATCH "https://gitlab.example.com/api/scim/v2/groups/test_group/Users/f0b1d561c-21ff-4092-beab-8154b17f82f2" --header "Authorization: Bearer <SCIM_TOKEN>" --header "Content-Type: application/scim+json" --data '{ "Operations": [{"op":"Replace","path":"active","value":"true"}] }'

로그인 후 500 오류

Tier: Free, Premium, Ultimate Offering: Self-managed, GitLab Dedicated

SAML 로그인 페이지로부터 다시 리디렉션되었을 때 GitLab에서 “500 오류”가 표시된다면, 다음 사항을 나타낼 수 있습니다:

  • GitLab이 SAML 사용자의 이메일 주소를 가져오지 못했습니다. 식별 공급자가 사용자의 이메일 주소를 포함하는 클레임인 email 또는 mail을 제공하는지 확인하세요.
  • gitlab.rb 파일에서 identity provider_cert_fingerprint 또는 identity provider_cert 파일을 잘못 설정한 경우입니다.
  • gitlab.rb 파일이 identity provider_cert_fingerprint을 활성화하도록 설정되어 있고 identity provider_cert가 제공되고 있는 경우 또는 그 반대인 경우입니다.

로그인 후 422 오류

Tier: Free, Premium, Ultimate Offering: Self-managed, GitLab Dedicated

SAML 로그인 페이지에서 리디렉션된 후 GitLab에서 “422 오류”가 표시된다면, 식별 공급자에서 잘못 구성된 Assertion Consumer Service (ACS) URL이 있을 수 있습니다.

ACS URL이 올바른지 확인하고, 여전히 오류가 있는 경우 다른 Troubleshooting 섹션을 검토하세요.

허용되지 않은 이메일로 인한 422 오류

“이메일이 가입에 허용되지 않습니다. 정상적인 이메일 주소를 사용하세요.”라는 422 오류가 발생할 수 있습니다.

이 메시지는 도메인 허용 목록 또는 거부 목록 설정에서 도메인을 추가하거나 삭제해야 함을 나타낼 수 있습니다.

이 해결 방법을 적용하려면:

  1. 왼쪽 사이드바에서 관리자 영역을 선택합니다.
  2. 설정 > 일반을 선택합니다.
  3. 가입 제한을 확장합니다.
  4. 가입을 허용하는 도메인가입 거부하는 도메인에 도메인을 추가하거나 제거합니다.
  5. 변경 사항 저장을 선택합니다.

SAML을 통해 로그인할 때 사용자가 차단됨

Tier: Free, Premium, Ultimate Offering: Self-managed, GitLab Dedicated

SAML을 통해 로그인할 때 사용자가 차단된 가장 가능성 있는 이유는 다음과 같습니다:

  • 설정에 따라 gitlab_rails['omniauth_block_auto_created_users'] = true로 설정되어 있으며, 이 사용자가 처음으로 로그인하는 경우입니다.
  • required_groups이 구성되어 있지만 사용자가 해당 그룹의 구성원이 아닌 경우입니다.

구글 워크스페이스 문제 해결 팁

Google Workspace에서 제공하는 SAML 앱 오류 메시지는 구글에서 오류를 확인하는 데 도움이 될 수 있습니다. 특히 다음과 같은 403 오류에 특별히 신경쓰세요:

  • app_not_configured
  • app_not_configured_for_user

메시지: “회원의 이메일 주소가 SAML 계정에 연결되지 않았습니다”

Tier: Premium, Ultimate Offering: GitLab.com

이 오류는 GitLab.com 그룹(또는 하위 그룹 또는 그룹 내 프로젝트)에 SAML SSO 강제 적용이 설정된 경우 사용자를 그룹에 초대하려고 시도한 후에 나타납니다.

그룹에 사용자를 초대한 후 이 메시지를 보게 된 경우:

  1. 사용자가 SAML 식별 공급자에 추가되었는지 확인합니다.
  2. 사용자에게 기존 GitLab.com 계정에 SAML을 연결하도록 요청하고, 이미 계정이 있는 경우 식별 공급자 대시보드를 통해 GitLab.com에 액세스하거나 수동으로 가입하고 새 계정에 SAML을 연결하도록 요청합니다.
  3. 사용자가 최상위 그룹의 구성원인지 확인합니다.

또한, 로그인 후 404를 받는 사용자의 문제 해결을 참조하세요.

메시지: SAML 응답에 이메일 주소가 포함되지 않았습니다. SAML 식별 공급자가 해당 속성을 보내도록 구성되어 있지 않거나 식별 공급자 디렉터리에 사용자의 이메일 주소 값이 없는 경우

이 오류는 SAML 응답에 사용자의 이메일 주소가 email 또는 mail 속성에 포함되어 있지 않을 때 나타납니다. SAML 식별 공급자가 지원되는 메일 속성을 보내도록 구성되어 있는지 확인하세요.

예시:

<Attribute Name="email">
  <AttributeValue>user@example.com‹/AttributeValue>
</Attribute>

http://schemas.xmlsoap.org/ws/2005/05/identity/claimshttp://schemas.microsoft.com/ws/2008/06/identity/claims/과 같은 구문으로 시작하는 속성 이름은 GitLab 16.7부터 기본적으로 지원됩니다.

<Attribute Name="http://schemas.microsoft.com/ws/2008/06/identity/claims/emailaddress">
  <AttributeValue>user@example.com‹/AttributeValue>
</Attribute>