Skip to main content

SAML 구성 참조

You can see SAML metadata for your GitHub Enterprise Server instance, and you can learn more about available SAML attributes and response requirements.

SAML 구성 정보

GitHub Enterprise Server에 대한 인증에 SAML SSO(Single Sign-On)를 사용하려면 외부 IDP(SAML ID 공급자)와 your GitHub Enterprise Server instance에서 엔터프라이즈 또는 조직을 모두 구성해야 합니다. SAML 구성에서 GitHub Enterprise Server은 SAML SP(Service Provider)로 작동합니다.

GitHub Enterprise Server에 SAML SSO를 구성할 때는 SAML IdP의 고유한 값을 입력해야 하며, IdP의 GitHub Enterprise Server에 있는 고유한 값도 입력해야 합니다. GitHub Enterprise Server의 SAML SSO 구성에 대한 자세한 내용은 "엔터프라이즈에 대한 SAML Single Sign-On 구성"를 참조하세요

SAML 메타데이터

your GitHub Enterprise Server instance에 대한 SP 메타데이터는 에서 http(s)://HOSTNAME/saml/metadata사용할 수 있습니다. 여기서 HOSTNAME 은 인스턴스의 호스트 이름입니다. GitHub Enterprise Server에서는 urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST 바인딩을 사용합니다.

기타 이름설명예제
SP 엔터티 IDSP URL, 대상 그룹 제한GitHub Enterprise Server의 최상위 URLhttp(s)://HOSTNAME
SP 어설션 소비자 서비스(ACS) URL회신, 수신자 또는 대상 URLIdP가 SAML 응답을 보내는 URLhttp(s)://HOSTNAME/saml/consume
SP SSO(Single Sign-On) URLIdP가 SSO로 시작하는 URLhttp(s)://HOSTNAME/sso

SAML 특성

다음은 GitHub Enterprise Server에 사용할 수 있는 SAML 특성입니다. 관리 콘솔에서 특성 이름을 변경할 수 있습니다(administrator 특성은 제외). 자세한 내용은 "관리 콘솔 액세스"를 참조하세요.

Name필수 여부Description
NameID영구 사용자 식별자입니다. 영구 이름 식별자 형식을 사용할 수 있습니다. GitHub Enterprise Server은 사용자 이름으로 사용할 NameID 요소를 정규화합니다. 자세한 내용은 "외부 인증에 대한 사용자 이름 고려 사항"을 참조하세요.

참고: 사람이 읽을 수 있는 영구 식별자를 사용하는 것이 중요합니다. 임시 식별자 형식(예:urn:oasis:names:tc:SAML:2.0:nameid-format:transient)을 사용하면 로그인할 때마다 계정이 다시 연결되므로 권한 부여 관리에 악영향을 미칠 수 있습니다.
SessionNotOnOrAfterNoGitHub Enterprise Server에서 연결된 세션을 무효화하는 날짜입니다. 무효화 후 사용자는 your GitHub Enterprise Server instance에 액세스하기 위해 다시 한 번 인증해야 합니다. 자세한 내용은 "세션 기간 및 시간 제한"을 참조하세요.

특성에 대해 둘 이상의 값을 지정하려면 여러 <saml2:AttributeValue> 요소를 사용합니다.

<saml2:Attribute FriendlyName="public_keys" Name="urn:oid:1.2.840.113549.1.1.1" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml2:AttributeValue>ssh-rsa LONG KEY</saml2:AttributeValue>
    <saml2:AttributeValue>ssh-rsa LONG KEY 2</saml2:AttributeValue>
</saml2:Attribute>

SAML 응답 요구 사항

GitHub Enterprise Server에서는 IdP의 응답 메시지가 다음 요구 사항을 충족할 것을 요구합니다.

  • IdP는 루트 응답 문서의 <Destination> 요소에서 제공되고 루트 응답 문서에 서명된 경우에만 ACS URL과 일치해야 합니다. IdP가 어설션에 서명하면 GitHub Enterprise Server은 어설션을 무시합니다.

  • IdP는 항상 <Audience> 요소를 <AudienceRestriction> 요소의 일부로 제공해야 합니다. 값은 GitHub Enterprise Server에 대해 사용자의 EntityId 값과 일치해야 합니다.{ % ifversion ghes or ghae %} 이 값은 http(s)://HOSTNAME{와 같은 your GitHub Enterprise Server instance에 액세스하는 URL입니다. % endif %}

  • IdP에서 디지털 서명을 사용하여 응답에 있는 각 어설션을 보호해야 합니다. 각 개별 <Assertion> 요소에 서명하거나 <Response> 요소에 서명하여 디지털 서명으로 보호할 수 있습니다.

  • IdP에서 <NameID> 요소를 <Subject> 요소의 일부로 제공해야 합니다. 모든 영구 이름 식별자 형식을 사용할 수 있습니다.

  • IdP에는 ACS URL로 설정해야 하는 Recipient 특성이 포함되어야 합니다. 다음 예제에서는 이 특성을 확인할 수 있습니다.

    <samlp:Response ...>
      <saml:Assertion ...>
        <saml:Subject>
          <saml:NameID ...>...</saml:NameID>
          <saml:SubjectConfirmation ...>
            <saml:SubjectConfirmationData Recipient="https://HOSTNAME/saml/consume" .../>
          </saml:SubjectConfirmation>
        </saml:Subject>
        <saml:AttributeStatement>
          <saml:Attribute FriendlyName="USERNAME-ATTRIBUTE" ...>
            <saml:AttributeValue>monalisa</saml:AttributeValue>
          </saml:Attribute>
        </saml:AttributeStatement>
      </saml:Assertion>
    </samlp:Response>
    

세션 기간 및 시간 제한

사용자가 IdP를 사용하여 인증을 받고 무기한으로 권한을 유지하는 것을 방지하기 위해 GitHub Enterprise Server는 your GitHub Enterprise Server instance에 대한 액세스 권한이 있는 각 사용자 계정에 대한 세션을 주기적으로 무효화합니다. 무효화되면 사용자는 IdP를 다시 한 번 인증해야 합니다. 기본적으로 IdP에서 SessionNotOnOrAfter 특성에 대한 값을 어설션하지 않는 경우 GitHub Enterprise Server에서는 IdP를 이용해 인증에 성공한 후 1주일이 지나면 세션을 무효화합니다.

세션 기간을 사용자 지정하려면 IdP에서 SessionNotOnOrAfter 특성의 값을 정의하면 됩니다. 24시간 미만의 값을 정의하면 GitHub Enterprise Server은 GitHub Enterprise Server에서는 리디렉션을 시작할 때마다 인증 메시지를 표시할 수 있습니다.

참고:

  • Azure AD 경우 SAML 토큰에 대한 구성 가능한 수명 정책은 GitHub Enterprise Server에 대한 세션 시간 제한을 제어하지 않습니다.
  • OKTA에서는 현재 GitHub Enterprise Server을 사용한 SAML 인증 과정에서 SessionNotOnOrAfter 특성을 보내지 않습니다. 자세한 내용은 OKTA에 문의하세요.