InfoGrab Docs

SAML 싱글 사인온: 기술 문서

요약

SAML(Security Assertion Markup Language)은 OneLogin과 같은 ID 공급자(IdP)가 Mattermost와 같은 서비스 제공자(SP)에게 인증 자격 증명을 전달할 수 있도록 하는 개방형 표준입니다.

SAML(Security Assertion Markup Language)은 OneLogin과 같은 ID 공급자(IdP)가 Mattermost와 같은 서비스 제공자(SP)에게 인증 자격 증명을 전달할 수 있도록 하는 개방형 표준입니다.

간단히 말해, 하나의 자격 증명 세트를 사용하여 여러 사이트에 로그인할 수 있음을 의미합니다. SAML ID 공급자 계정을 통해 동일한 계정으로 Mattermost 및 다른 사이트에 안전하게 로그인할 수 있습니다.

주요 이점은 관리자가 사용자들이 SAML ID 공급자 자격 증명으로 액세스할 수 있는 사이트를 제어하여 사용자 관리를 중앙화하는 데 도움이 된다는 것입니다.

Mattermost는 단일 메타데이터 URL을 사용하여 싱글 사인온 URL을 통해 IdP 메타데이터 URL을 생성하는 ID 공급자의 구성 정보를 가져오는 것을 지원합니다. IdP 메타데이터 XML 파일에는 IdP 인증서, 엔티티 ID, 리디렉션 URL 및 로그아웃 URL이 포함됩니다.

이 URL을 사용하면 SAML SSO URL 및 ID 공급자 발급자 URL 필드가 구성 프로세스에서 자동으로 채워지고 ID 공급자 공개 인증서도 서버에서 다운로드되어 로컬에 설정됩니다.

현재 Okta 및 Microsoft ADFS 서버 2012 및 2016에서 지원됩니다.

자세한 단계는 Okta로 SAML 구성, Windows Server 2012용 Microsoft ADFS로 SAML 구성, Microsoft Windows Server 2016을 사용한 Microsoft ADFS로 SAML 구성 문서를 참조하세요. v10.9에서 도입된 AES-192-GCM 및 AES-256-GCM 암호화 지원을 포함하여 Mattermost가 SAML을 위해 지원하는 암호화 방법 에 대한 자세한 내용은 암호화 옵션 문서를 참조하세요.

SAML 공급자#

ID 공급자(IdP): ID 공급자가 인증을 수행합니다. 사용자가 로그인하기 위해 클릭할 때 ID 공급자가 사용자가 누구인지 확인하고 사이트에 액세스할 적절한 권한과 함께 서비스 제공자에게 데이터를 전송합니다.

예시: OneLogin, Okta, Microsoft Active Directory(ADFS) 또는 Azure.

서비스 제공자(SP): 서비스 제공자는 IdP에서 인증 및 권한 부여 정보를 받습니다. 받은 후 사용자에게 시스템 접근을 허가하고 로그인시킵니다.

예시: Mattermost, Zendesk, Zoom, Salesforce.

SAML 요청 (AuthNRequest)#

Mattermost가 SP 시작 SAML 요청 흐름을 시작할 때 IdP에 base64 문자열로 XML 페이로드를 포함하는 HTTP-Redirect 바인딩 요청을 생성합니다.

bM441nuRIzAjKeMM8RhegMFjZ4L4xPBHhAfHYqgnYDQnSxC++Qn5IocWuzuBGz7JQmT9C57nxjxgbFIatiqUCQN17aYrLn/mWE09C5mJMYlcV68ibEkbR/JKUQ+2u/N+mSD4/C/QvFvuB6BcJaXaz0h7NwGhHROUte6MoGJKMPE=

AuthNRequests은 Mattermost에 의해 서명될 수도 있으며, 이 경우 XML 페이로드는 다음과 유사합니다:

Note

Mattermost v11부터 기본 서명 알고리즘이 보안 향상을 위해 SHA-1에서 SHA-256으로 업데이트되었습니다. 아래 예시는 새로운 기본 SHA-256 알고리즘을 반영합니다.

<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:samlsig="https://www.w3.org/2000/09/xmldsig#" ID="_u5mpjadp1fdozfih4cj8ap4brh" Version="2.0" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" AssertionConsumerServiceURL="http://localhost:8065/login/sso/saml" IssueInstant="2019-06-08T16:00:31Z">
    <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">https://www.okta.com/exkoxukx1D8OIfY03356</saml:Issuer>
    <samlsig:Signature Id="Signature1">
        <samlsig:SignedInfo>
            <samlsig:CanonicalizationMethod Algorithm="https://www.w3.org/2001/10/xml-exc-c14n#"></samlsig:CanonicalizationMethod>
            <samlsig:SignatureMethod Algorithm="https://www.w3.org/2000/09/xmldsig#rsa-sha256"></samlsig:SignatureMethod>
            <samlsig:Reference URI="#_u5mpjadp1fdozfih4cj8ap4brh">
                <samlsig:Transforms>
                    <samlsig:Transform Algorithm="https://www.w3.org/2000/09/xmldsig#enveloped-signature"></samlsig:Transform>
                </samlsig:Transforms>
                <samlsig:DigestMethod Algorithm="https://www.w3.org/2000/09/xmldsig#sha256"></samlsig:DigestMethod>
                <samlsig:DigestValue></samlsig:DigestValue>
            </samlsig:Reference>
        </samlsig:SignedInfo>
        <samlsig:SignatureValue></samlsig:SignatureValue>
        <samlsig:KeyInfo>
            <samlsig:X509Data>
                <samlsig:X509Certificate>MIIFmzCCA4OgAwIBAgIJAIusvV3gZIwiMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAlVTMRIwEAYDVQQHDAlQYWxvIEFsdG8xEzARBgNVBAoMCk1hdHRlcm1vc3QxDzANBgNVBAsMBkRldk9wczEZMBcGA1UEAwwQYmFzZS5leGFtcGxlLmNvbTAeFw0xOTA2MDcxMjQ0MTdaFw0yOTA2MDQxMjQ0MTdaMGIxCzAJBgNVBAYTAlVTMRIwEAYDVQQHDAlQYWxvIEFsdG8xEzARBgNVBAoMCk1hdHRlcm1vc3QxDzANBgNVBAsMBkRldk9wczEZMBcGA1UEAwwQYmFzZS5leGFtcGxlLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALAfDj+RyByszTOPRL4b+cilNF/3PB1I0CG3TNzgllgy5CwRGHLKn5/t8rPsJoWLKOUGenzVdXWuoVi3jyl5FZ1N60CBbXfmSWk20dSIkcYCcYEgs1BTBqKKYFw2dV4M0oppzNtlq7A0Glpg/gpaR/2TXEPAhOsUfORC2qAdJt9ev0AQjp5V0TkIKMZz8oo33Coi38TG5r/LG+ihRbpWzO7j9Rc2S5I6bczvG4wOg7nVKG+B5XBvuU9PjSqgxpd/F/fYf+ggAEru58E+VM4veCRV8vSPbBqDG4FMPV6DiA+tH/70n6zuPCS3soxX00kjKtP80QD6UgzvM2NN7PHiNlf0Zj6VCU3VdjEnypg7dzlHJuyyaAaTD5nSfkecamEoJpq7kaUB7uTmBHELRUhOOy24f54HnP72vnxicZL8cWsOkJwQAqIGzBxQ7J0uX4Os71WrV2YIur8QVk6KN6MBPxfiCh3xO/R+cycgx0aMrWZoyzOzP7NCTM5MNE41C48xeGviyCtUID4xiBow+xo6IDUaiCoUVJhz579ore8ic70a19DD0qHy4SpBvrUwCO54kvkgn6HjYlLC/k8nFM9F9W9wVAQD/QwIjd7EtLZLGgbU61Jv3q4kZxxq270hogCRY0lmI3RxkedGHhetF7kaizrikW5zJQEeido/ir37HhX5AgMBAAGjVDBSMBIGA1UdEwEB/wQIMAYBAf8CAQAwPAYDVR0RBDUwM4IQbG9ncy5leGFtcGxlLmNvbYITbWV0cmljcy5leGFtcGxlLmNvbYcEwKgAAYcEfwAAATANBgkqhkiG9w0BAQsFAAOCAgEAH1O91BABHXZjrU7v1OwG+GbU/4TYZqBXXNxax++OFSRCkEEoNKGg49R6J7lY4lrm12zBlw+oGSyjIOerzi39/dcxDkKpzyhGvEN4mExbDlybmdCVrHPeWgZl7uwqn4Bj1xiu97M6eMthgxJE7KVNDGDHthGL0/fTlONIh3qS7Far33hLHJJKy3+lC1MDB8cNltV3mf/ctHCx5Wa0bfZId0MJgd/seP0WU1HCf3kIxhnhsnOYs32xu7EGiM4/lgnquVd/q/f99ueSaDSHrep373/w2ce9iF3U0qcLd2iP8ayF/daGeW1dVPL9R10Oe4BpRjMkjlLwhZdjJeKSg9GBa2GXUEn1Ru9vpSw/C10no3Qx/6ZHweYbSmJ6hBg4T0nDBp6iVS1eQULNXxDuDWb26U0ESOO5jK8ATywuc45o0bqdvD1XOrGYGfGnofx7ofRWwKHWfltvxurnbsyo2vH6nM6K41K2DpVdyQOKAGvKe/oCWfdi+WyBQJGWcIp2OTC1XyWHv7JsY3lo04+islkHEcqJyd8Rf8GWmRHdXz0WzGiZbxWzAuvRRWnzM31VAws8kQBHTBwIJlJoGX4AXfEvPi+NTxkntf8cQdJucK9ZZbP4ycXHULO4LneyJoJ9Q7nxX11xWv7BDWxxclOXy6tyUkg9Fjb7pQ/HCVvGhRzilVU=</samlsig:X509Certificate>
            </samlsig:X509Data>
        </samlsig:KeyInfo>
    </samlsig:Signature>
</samlp:AuthnRequest>

SAML 응답#

IdP에서 SP로 전송되는 다양한 유형의 SAML 응답이 있습니다. 응답에는 사용자의 NameID와 속성을 포함하는 Assertion이 포함됩니다.

아래는 다양한 응답 유형의 표입니다. SAML 어설션이 서명되었지만 SAML 응답 자체가 서명되지 않은 경우를 제외하고 각 응답 유형이 완전히 지원됩니다:

서명된 SAML 응답서명된 SAML 어설션암호화된 SAML 어설션Mattermost 지원 여부
YesYesYesYes
YesYesNoYes
YesNoYesYes
YesNoNoYes
NoYesYes부분 지원, 어설션 서명 검증 미지원
NoYesNo부분 지원, 어설션 서명 검증 미지원
NoNoYesYes
NoNoNoYes

각 유형의 XML 응답 예시는 OneLogin SAML 응답 예시 를 참조하세요.

AD/LDAP와의 SAML 동기화 기술적 설명#

활성화된 경우 AD/LDAP와의 SAML 동기화는 단계적으로 수행됩니다:

  1. Users.AuthServiceldap 로 설정된 현재 LDAP 사용자를 Mattermost 데이터베이스에서 가져옵니다. Mattermost 데이터베이스에 대한 SQL 쿼리: SELECT * FROM Users WHERE AuthService = 'ldap'.
  2. Users.AuthServicesaml 로 설정된 현재 SAML 사용자를 Mattermost 데이터베이스에서 가져옵니다. Mattermost 데이터베이스에 대한 SQL 쿼리: SELECT * FROM Users WHERE AuthService = 'saml'.
  3. LdapSettings.UserFilter 로 정의된 LDAP 서버에서 현재 LDAP 사용자를 가져옵니다. LdapSettings.MaxPageSize 로 정의된 배치로 사용자가 가져옵니다.
  4. LDAP 속성을 업데이트합니다. 1단계에서 가져온 각 기존 Mattermost 사용자에 대해 3단계의 LDAP 사용자 목록에서 일치 항목을 찾으려고 시도합니다. 일치 항목을 찾으려면 Mattermost 사용자의 Users.AuthData 필드를 LdapSettings.IdAttribute LDAP 설정과 비교합니다.
  • 사용자의 속성이 변경되면 해당 속성이 LDAP 서버에서 복사되고 사용자가 업데이트된 것으로 표시됩니다.
  • 해당 LdapSettings.IdAttribute 가 발견되지 않으면 사용자가 LDAP 서버에서 삭제된 것으로 가정하여 Users.DeleteAt 필드를 유효한 타임스탬프로 설정하여 Mattermost에서 비활성화됩니다.
  1. SAML 속성을 업데이트합니다. 2단계에서 가져온 각 기존 Mattermost 사용자에 대해 3단계의 LDAP 사용자 목록에서 일치 항목을 찾으려고 시도합니다. 일치 항목을 찾으려면 SamlSettings.EmailLdapSettings.EmailAttribute LDAP 설정과 비교합니다.
  • 사용자의 속성이 변경되면 해당 속성이 LDAP 서버에서 복사되고 사용자가 업데이트된 것으로 표시됩니다.
  • 해당 LdapSettings.EmailAttribute 가 발견되지 않으면 사용자가 LDAP 서버에서 삭제된 것으로 가정하여 Users.DeleteAt 필드를 유효한 타임스탬프로 설정하여 Mattermost에서 비활성화됩니다.

자주 묻는 질문#

Mattermost가 사용하는 SAML 메타데이터 XML 파일을 얻는 방법은 무엇인가요?#

/api/v4/saml/metadata 의 Mattermost RESTful API 엔드포인트를 호출하여 XML 파일을 얻을 수 있습니다.

다른 유용한 SAML API 호출은 API 레퍼런스 를 참조하세요.

API를 사용하여 사용자 속성을 업데이트할 수 있나요?#

아니요. Mattermost가 사용자 인증을 위해 SAML을 사용하도록 구성된 경우 API를 통해 다음 사용자 속성 변경을 수행할 수 없습니다: 이름, 성, 직위, 닉네임, 이메일, 프로필 이미지 또는 사용자 이름. SAML은 이러한 사용자 속성에 대한 권위 있는 소스여야 합니다.

Mattermost의 사용자 ObjectGUID가 ADFS에서 보는 것과 다른 이유는 무엇인가요?#

Active Directory Object-Guid 속성(LDAP 표시 이름 objectGUID)은 다양한 방식으로 표시될 수 있는 16바이트 배열입니다. 그러나 Microsoft만 ObjectGUID의 인코딩을 변경합니다. 나머지는 다음과 같이 기본(8진수, 10진수, 16진수)의 차이를 제외하고 동일하게 유지합니다:

  1. ldapsearch linux 명령은 base 64로 표시합니다: Hrz/HqNKnU+lCNTYHx9Ycw==. LDIF 파일에서도 이 형식이 사용됩니다.
  2. Mattermost가 사용하는 LDAP Golang 패키지 는 각 바이트가 역슬래시로 구분된 16진수(16진법) 배열로 값을 출력합니다: \1e\bc\ff\1e\a3\4a\9d\4f\a5\08\d4\d8\1f\1f\58\73
    • 역슬래시를 제거하면 (1ebcff1ea34a9d4fa508d4d81f1f5873) Golang으로 다음과 같이 파싱 할 수 있습니다. 스니펫은 각 값의 10진수 표현을 출력합니다: [30 188 255 30 163 74 157 79 165 8 212 216 31 31 88 115]
  3. Windows Powershell은 다음과 같이 값을 표시합니다: 1effbc1e-4aa3-4f9d-a508-d4d81f1f5873

relaystate 를 ID 공급자에서 클라이언트로 다시 전달해야 하나요?#

예. 기본적으로 이미 그렇게 하지 않는 공급자와 Mattermost를 통합하는 경우 relaystate 가 활성화되어 있는지 확인하세요. 자세한 내용은 PingIdentity SAML RelayState 문서를 참조하세요.

SAML 로그온 프로세스 문제를 해결하는 방법은 무엇인가요?#

SAML 연결 문제를 해결하기 위해 가장 유용하다고 발견한 도구는 SAML Chrome Panel Chrome 확장 프로그램입니다.

다른 브라우저에서 유사한 도구를 알지 못하지만 이 도구를 위해 Chrome을 설치할 가치가 있습니다!

SAML 싱글 사인온: 기술 문서

원문 보기
요약

SAML(Security Assertion Markup Language)은 OneLogin과 같은 ID 공급자(IdP)가 Mattermost와 같은 서비스 제공자(SP)에게 인증 자격 증명을 전달할 수 있도록 하는 개방형 표준입니다.

SAML(Security Assertion Markup Language)은 OneLogin과 같은 ID 공급자(IdP)가 Mattermost와 같은 서비스 제공자(SP)에게 인증 자격 증명을 전달할 수 있도록 하는 개방형 표준입니다.

간단히 말해, 하나의 자격 증명 세트를 사용하여 여러 사이트에 로그인할 수 있음을 의미합니다. SAML ID 공급자 계정을 통해 동일한 계정으로 Mattermost 및 다른 사이트에 안전하게 로그인할 수 있습니다.

주요 이점은 관리자가 사용자들이 SAML ID 공급자 자격 증명으로 액세스할 수 있는 사이트를 제어하여 사용자 관리를 중앙화하는 데 도움이 된다는 것입니다.

Mattermost는 단일 메타데이터 URL을 사용하여 싱글 사인온 URL을 통해 IdP 메타데이터 URL을 생성하는 ID 공급자의 구성 정보를 가져오는 것을 지원합니다. IdP 메타데이터 XML 파일에는 IdP 인증서, 엔티티 ID, 리디렉션 URL 및 로그아웃 URL이 포함됩니다.

이 URL을 사용하면 SAML SSO URL 및 ID 공급자 발급자 URL 필드가 구성 프로세스에서 자동으로 채워지고 ID 공급자 공개 인증서도 서버에서 다운로드되어 로컬에 설정됩니다.

현재 Okta 및 Microsoft ADFS 서버 2012 및 2016에서 지원됩니다.

자세한 단계는 Okta로 SAML 구성, Windows Server 2012용 Microsoft ADFS로 SAML 구성, Microsoft Windows Server 2016을 사용한 Microsoft ADFS로 SAML 구성 문서를 참조하세요. v10.9에서 도입된 AES-192-GCM 및 AES-256-GCM 암호화 지원을 포함하여 Mattermost가 SAML을 위해 지원하는 암호화 방법 에 대한 자세한 내용은 암호화 옵션 문서를 참조하세요.

SAML 공급자#

ID 공급자(IdP): ID 공급자가 인증을 수행합니다. 사용자가 로그인하기 위해 클릭할 때 ID 공급자가 사용자가 누구인지 확인하고 사이트에 액세스할 적절한 권한과 함께 서비스 제공자에게 데이터를 전송합니다.

예시: OneLogin, Okta, Microsoft Active Directory(ADFS) 또는 Azure.

서비스 제공자(SP): 서비스 제공자는 IdP에서 인증 및 권한 부여 정보를 받습니다. 받은 후 사용자에게 시스템 접근을 허가하고 로그인시킵니다.

예시: Mattermost, Zendesk, Zoom, Salesforce.

SAML 요청 (AuthNRequest)#

Mattermost가 SP 시작 SAML 요청 흐름을 시작할 때 IdP에 base64 문자열로 XML 페이로드를 포함하는 HTTP-Redirect 바인딩 요청을 생성합니다.

bM441nuRIzAjKeMM8RhegMFjZ4L4xPBHhAfHYqgnYDQnSxC++Qn5IocWuzuBGz7JQmT9C57nxjxgbFIatiqUCQN17aYrLn/mWE09C5mJMYlcV68ibEkbR/JKUQ+2u/N+mSD4/C/QvFvuB6BcJaXaz0h7NwGhHROUte6MoGJKMPE=

AuthNRequests은 Mattermost에 의해 서명될 수도 있으며, 이 경우 XML 페이로드는 다음과 유사합니다:

Note

Mattermost v11부터 기본 서명 알고리즘이 보안 향상을 위해 SHA-1에서 SHA-256으로 업데이트되었습니다. 아래 예시는 새로운 기본 SHA-256 알고리즘을 반영합니다.

<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:samlsig="https://www.w3.org/2000/09/xmldsig#" ID="_u5mpjadp1fdozfih4cj8ap4brh" Version="2.0" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" AssertionConsumerServiceURL="http://localhost:8065/login/sso/saml" IssueInstant="2019-06-08T16:00:31Z">
    <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">https://www.okta.com/exkoxukx1D8OIfY03356</saml:Issuer>
    <samlsig:Signature Id="Signature1">
        <samlsig:SignedInfo>
            <samlsig:CanonicalizationMethod Algorithm="https://www.w3.org/2001/10/xml-exc-c14n#"></samlsig:CanonicalizationMethod>
            <samlsig:SignatureMethod Algorithm="https://www.w3.org/2000/09/xmldsig#rsa-sha256"></samlsig:SignatureMethod>
            <samlsig:Reference URI="#_u5mpjadp1fdozfih4cj8ap4brh">
                <samlsig:Transforms>
                    <samlsig:Transform Algorithm="https://www.w3.org/2000/09/xmldsig#enveloped-signature"></samlsig:Transform>
                </samlsig:Transforms>
                <samlsig:DigestMethod Algorithm="https://www.w3.org/2000/09/xmldsig#sha256"></samlsig:DigestMethod>
                <samlsig:DigestValue></samlsig:DigestValue>
            </samlsig:Reference>
        </samlsig:SignedInfo>
        <samlsig:SignatureValue></samlsig:SignatureValue>
        <samlsig:KeyInfo>
            <samlsig:X509Data>
                <samlsig:X509Certificate>MIIFmzCCA4OgAwIBAgIJAIusvV3gZIwiMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAlVTMRIwEAYDVQQHDAlQYWxvIEFsdG8xEzARBgNVBAoMCk1hdHRlcm1vc3QxDzANBgNVBAsMBkRldk9wczEZMBcGA1UEAwwQYmFzZS5leGFtcGxlLmNvbTAeFw0xOTA2MDcxMjQ0MTdaFw0yOTA2MDQxMjQ0MTdaMGIxCzAJBgNVBAYTAlVTMRIwEAYDVQQHDAlQYWxvIEFsdG8xEzARBgNVBAoMCk1hdHRlcm1vc3QxDzANBgNVBAsMBkRldk9wczEZMBcGA1UEAwwQYmFzZS5leGFtcGxlLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALAfDj+RyByszTOPRL4b+cilNF/3PB1I0CG3TNzgllgy5CwRGHLKn5/t8rPsJoWLKOUGenzVdXWuoVi3jyl5FZ1N60CBbXfmSWk20dSIkcYCcYEgs1BTBqKKYFw2dV4M0oppzNtlq7A0Glpg/gpaR/2TXEPAhOsUfORC2qAdJt9ev0AQjp5V0TkIKMZz8oo33Coi38TG5r/LG+ihRbpWzO7j9Rc2S5I6bczvG4wOg7nVKG+B5XBvuU9PjSqgxpd/F/fYf+ggAEru58E+VM4veCRV8vSPbBqDG4FMPV6DiA+tH/70n6zuPCS3soxX00kjKtP80QD6UgzvM2NN7PHiNlf0Zj6VCU3VdjEnypg7dzlHJuyyaAaTD5nSfkecamEoJpq7kaUB7uTmBHELRUhOOy24f54HnP72vnxicZL8cWsOkJwQAqIGzBxQ7J0uX4Os71WrV2YIur8QVk6KN6MBPxfiCh3xO/R+cycgx0aMrWZoyzOzP7NCTM5MNE41C48xeGviyCtUID4xiBow+xo6IDUaiCoUVJhz579ore8ic70a19DD0qHy4SpBvrUwCO54kvkgn6HjYlLC/k8nFM9F9W9wVAQD/QwIjd7EtLZLGgbU61Jv3q4kZxxq270hogCRY0lmI3RxkedGHhetF7kaizrikW5zJQEeido/ir37HhX5AgMBAAGjVDBSMBIGA1UdEwEB/wQIMAYBAf8CAQAwPAYDVR0RBDUwM4IQbG9ncy5leGFtcGxlLmNvbYITbWV0cmljcy5leGFtcGxlLmNvbYcEwKgAAYcEfwAAATANBgkqhkiG9w0BAQsFAAOCAgEAH1O91BABHXZjrU7v1OwG+GbU/4TYZqBXXNxax++OFSRCkEEoNKGg49R6J7lY4lrm12zBlw+oGSyjIOerzi39/dcxDkKpzyhGvEN4mExbDlybmdCVrHPeWgZl7uwqn4Bj1xiu97M6eMthgxJE7KVNDGDHthGL0/fTlONIh3qS7Far33hLHJJKy3+lC1MDB8cNltV3mf/ctHCx5Wa0bfZId0MJgd/seP0WU1HCf3kIxhnhsnOYs32xu7EGiM4/lgnquVd/q/f99ueSaDSHrep373/w2ce9iF3U0qcLd2iP8ayF/daGeW1dVPL9R10Oe4BpRjMkjlLwhZdjJeKSg9GBa2GXUEn1Ru9vpSw/C10no3Qx/6ZHweYbSmJ6hBg4T0nDBp6iVS1eQULNXxDuDWb26U0ESOO5jK8ATywuc45o0bqdvD1XOrGYGfGnofx7ofRWwKHWfltvxurnbsyo2vH6nM6K41K2DpVdyQOKAGvKe/oCWfdi+WyBQJGWcIp2OTC1XyWHv7JsY3lo04+islkHEcqJyd8Rf8GWmRHdXz0WzGiZbxWzAuvRRWnzM31VAws8kQBHTBwIJlJoGX4AXfEvPi+NTxkntf8cQdJucK9ZZbP4ycXHULO4LneyJoJ9Q7nxX11xWv7BDWxxclOXy6tyUkg9Fjb7pQ/HCVvGhRzilVU=</samlsig:X509Certificate>
            </samlsig:X509Data>
        </samlsig:KeyInfo>
    </samlsig:Signature>
</samlp:AuthnRequest>

SAML 응답#

IdP에서 SP로 전송되는 다양한 유형의 SAML 응답이 있습니다. 응답에는 사용자의 NameID와 속성을 포함하는 Assertion이 포함됩니다.

아래는 다양한 응답 유형의 표입니다. SAML 어설션이 서명되었지만 SAML 응답 자체가 서명되지 않은 경우를 제외하고 각 응답 유형이 완전히 지원됩니다:

서명된 SAML 응답서명된 SAML 어설션암호화된 SAML 어설션Mattermost 지원 여부
YesYesYesYes
YesYesNoYes
YesNoYesYes
YesNoNoYes
NoYesYes부분 지원, 어설션 서명 검증 미지원
NoYesNo부분 지원, 어설션 서명 검증 미지원
NoNoYesYes
NoNoNoYes

각 유형의 XML 응답 예시는 OneLogin SAML 응답 예시 를 참조하세요.

AD/LDAP와의 SAML 동기화 기술적 설명#

활성화된 경우 AD/LDAP와의 SAML 동기화는 단계적으로 수행됩니다:

  1. Users.AuthServiceldap 로 설정된 현재 LDAP 사용자를 Mattermost 데이터베이스에서 가져옵니다. Mattermost 데이터베이스에 대한 SQL 쿼리: SELECT * FROM Users WHERE AuthService = 'ldap'.
  2. Users.AuthServicesaml 로 설정된 현재 SAML 사용자를 Mattermost 데이터베이스에서 가져옵니다. Mattermost 데이터베이스에 대한 SQL 쿼리: SELECT * FROM Users WHERE AuthService = 'saml'.
  3. LdapSettings.UserFilter 로 정의된 LDAP 서버에서 현재 LDAP 사용자를 가져옵니다. LdapSettings.MaxPageSize 로 정의된 배치로 사용자가 가져옵니다.
  4. LDAP 속성을 업데이트합니다. 1단계에서 가져온 각 기존 Mattermost 사용자에 대해 3단계의 LDAP 사용자 목록에서 일치 항목을 찾으려고 시도합니다. 일치 항목을 찾으려면 Mattermost 사용자의 Users.AuthData 필드를 LdapSettings.IdAttribute LDAP 설정과 비교합니다.
  • 사용자의 속성이 변경되면 해당 속성이 LDAP 서버에서 복사되고 사용자가 업데이트된 것으로 표시됩니다.
  • 해당 LdapSettings.IdAttribute 가 발견되지 않으면 사용자가 LDAP 서버에서 삭제된 것으로 가정하여 Users.DeleteAt 필드를 유효한 타임스탬프로 설정하여 Mattermost에서 비활성화됩니다.
  1. SAML 속성을 업데이트합니다. 2단계에서 가져온 각 기존 Mattermost 사용자에 대해 3단계의 LDAP 사용자 목록에서 일치 항목을 찾으려고 시도합니다. 일치 항목을 찾으려면 SamlSettings.EmailLdapSettings.EmailAttribute LDAP 설정과 비교합니다.
  • 사용자의 속성이 변경되면 해당 속성이 LDAP 서버에서 복사되고 사용자가 업데이트된 것으로 표시됩니다.
  • 해당 LdapSettings.EmailAttribute 가 발견되지 않으면 사용자가 LDAP 서버에서 삭제된 것으로 가정하여 Users.DeleteAt 필드를 유효한 타임스탬프로 설정하여 Mattermost에서 비활성화됩니다.

자주 묻는 질문#

Mattermost가 사용하는 SAML 메타데이터 XML 파일을 얻는 방법은 무엇인가요?#

/api/v4/saml/metadata 의 Mattermost RESTful API 엔드포인트를 호출하여 XML 파일을 얻을 수 있습니다.

다른 유용한 SAML API 호출은 API 레퍼런스 를 참조하세요.

API를 사용하여 사용자 속성을 업데이트할 수 있나요?#

아니요. Mattermost가 사용자 인증을 위해 SAML을 사용하도록 구성된 경우 API를 통해 다음 사용자 속성 변경을 수행할 수 없습니다: 이름, 성, 직위, 닉네임, 이메일, 프로필 이미지 또는 사용자 이름. SAML은 이러한 사용자 속성에 대한 권위 있는 소스여야 합니다.

Mattermost의 사용자 ObjectGUID가 ADFS에서 보는 것과 다른 이유는 무엇인가요?#

Active Directory Object-Guid 속성(LDAP 표시 이름 objectGUID)은 다양한 방식으로 표시될 수 있는 16바이트 배열입니다. 그러나 Microsoft만 ObjectGUID의 인코딩을 변경합니다. 나머지는 다음과 같이 기본(8진수, 10진수, 16진수)의 차이를 제외하고 동일하게 유지합니다:

  1. ldapsearch linux 명령은 base 64로 표시합니다: Hrz/HqNKnU+lCNTYHx9Ycw==. LDIF 파일에서도 이 형식이 사용됩니다.
  2. Mattermost가 사용하는 LDAP Golang 패키지 는 각 바이트가 역슬래시로 구분된 16진수(16진법) 배열로 값을 출력합니다: \1e\bc\ff\1e\a3\4a\9d\4f\a5\08\d4\d8\1f\1f\58\73
    • 역슬래시를 제거하면 (1ebcff1ea34a9d4fa508d4d81f1f5873) Golang으로 다음과 같이 파싱 할 수 있습니다. 스니펫은 각 값의 10진수 표현을 출력합니다: [30 188 255 30 163 74 157 79 165 8 212 216 31 31 88 115]
  3. Windows Powershell은 다음과 같이 값을 표시합니다: 1effbc1e-4aa3-4f9d-a508-d4d81f1f5873

relaystate 를 ID 공급자에서 클라이언트로 다시 전달해야 하나요?#

예. 기본적으로 이미 그렇게 하지 않는 공급자와 Mattermost를 통합하는 경우 relaystate 가 활성화되어 있는지 확인하세요. 자세한 내용은 PingIdentity SAML RelayState 문서를 참조하세요.

SAML 로그온 프로세스 문제를 해결하는 방법은 무엇인가요?#

SAML 연결 문제를 해결하기 위해 가장 유용하다고 발견한 도구는 SAML Chrome Panel Chrome 확장 프로그램입니다.

다른 브라우저에서 유사한 도구를 알지 못하지만 이 도구를 위해 Chrome을 설치할 가치가 있습니다!