다음을 통해 공유


Single Sign-On SAML 프로토콜

이 문서에서는 Microsoft Entra ID가 SSO(Single Sign-On)에 대해 지원하는 SAML 2.0 인증 요청 및 응답에 대해 설명합니다.

다음 프로토콜 다이어그램에서는 Single Sign-On 시퀀스를 설명합니다. 클라우드 서비스(서비스 공급자)는 HTTP 리디렉션 바인딩을 사용하여 AuthnRequest(인증 요청) 요소를 Microsoft Entra ID(ID 공급자)에 전달합니다. 그런 다음 Microsoft Entra ID는 HTTP 게시 바인딩을 사용하여 클라우드 서비스에 Response 요소를 게시합니다.

SSO(Single Sign-On) 워크플로의 스크린샷

메모

이 문서에서는 Single Sign-On에 SAML을 사용하는 방법에 대해 설명합니다. Single Sign-On을 처리하는 다른 방법(예: OpenID Connect 또는 Windows 통합 인증 사용)에 대한 자세한 내용은 Microsoft Entra ID애플리케이션에 대한 Single Sign-On을 참조하세요.

AuthnRequest

사용자 인증을 요청하기 위해 클라우드 서비스는 AuthnRequest 요소를 Microsoft Entra ID로 보냅니다. 샘플 SAML 2.0 AuthnRequest 다음 예제와 같이 표시할 수 있습니다.

<samlp:AuthnRequest
  xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
  ID="C2dE3fH4iJ5kL6mN7oP8qR9sT0uV1w"
  Version="2.0" IssueInstant="2013-03-18T03:28:54.1839884Z"
  xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
  <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.contoso.com</Issuer>
</samlp:AuthnRequest>
매개 변수 묘사
ID 필수 Microsoft Entra ID는 이 특성을 사용하여 반환된 응답의 InResponseTo 특성을 채웁니다. ID는 숫자로 시작해서는 안 되므로 일반적인 전략은 GUID의 문자열 표현 앞에 "ID"와 같은 문자열을 추가하는 것입니다. 예를 들어 id6c1c178c166d486687be4aaf5e482730 유효한 ID입니다.
Version 필수 이 매개 변수는 2.0설정해야 합니다.
IssueInstant 필수 UTC 값과 왕복 형식("o")있는 DateTime 문자열입니다. Microsoft Entra ID는 이 형식의 DateTime 값을 예상하지만 값을 평가하거나 사용하지는 않습니다.
AssertionConsumerServiceURL 선택적 제공된 경우 이 매개 변수는 Microsoft Entra ID의 클라우드 서비스 RedirectUri 일치해야 합니다.
ForceAuthn 선택적 부울 값입니다. true이면 사용자가 Microsoft Entra ID를 사용하는 유효한 세션이 있더라도 강제로 다시 인증해야 합니다.
IsPassive 선택적 Microsoft Entra ID가 있는 경우 세션 쿠키를 사용하여 사용자 상호 작용 없이 사용자를 자동으로 인증해야 하는지 여부를 지정하는 부울 값입니다. 이 경우 Microsoft Entra ID는 세션 쿠키를 사용하여 사용자를 인증하려고 시도합니다.

, , , 같은 다른 모든 특성은무시되지 .

Microsoft Entra ID는 AuthnRequestConditions 요소도 무시합니다.

발급자

AuthnRequest Issuer 요소는 Microsoft Entra ID의 클라우드 서비스에 있는 ServicePrincipalNames 중 하나와 정확히 일치해야 합니다. 일반적으로 애플리케이션 등록 중에 지정된 앱 ID URI 설정됩니다.

Issuer 요소를 포함하는 SAML 발췌문은 다음 샘플과 같습니다.

<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.contoso.com</Issuer>

NameIDPolicy

이 요소는 응답에서 특정 이름 ID 형식을 요청하며 Microsoft Entra ID로 전송되는 AuthnRequest 요소에서 선택 사항입니다.

NameIdPolicy 요소는 다음 샘플과 같습니다.

<NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"/>

NameIDPolicy 제공된 경우 선택적 Format 특성을 포함할 수 있습니다. Format 특성은 다음 값 중 하나만 가질 수 있습니다. 다른 값이 있으면 오류가 발생합니다.

  • urn:oasis:names:tc:SAML:2.0:nameid-format:persistent: Microsoft Entra ID는 NameID 클레임을 쌍별 식별자로 발급합니다.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress: Microsoft Entra ID는 NameID 클레임을 전자 메일 주소 형식으로 발급합니다.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified: 이 값을 사용하면 Microsoft Entra ID에서 클레임 형식을 선택할 수 있습니다. Microsoft Entra ID는 NameID 클레임을 쌍별 식별자로 발급합니다.
  • urn:oasis:names:tc:SAML:2.0:nameid-format:transient: Microsoft Entra ID는 NameID 클레임을 현재 SSO 작업에 고유한 임의로 생성된 값으로 발급합니다. 즉, 값이 일시적이고 인증 사용자를 식별하는 데 사용할 수 없습니다.

SPNameQualifier 지정한 경우 Microsoft Entra ID는 응답에 동일한 SPNameQualifier 포함합니다.

Microsoft Entra ID는 AllowCreate 특성을 무시합니다.

RequestedAuthnContext

RequestedAuthnContext 요소는 원하는 인증 방법을 지정합니다. Microsoft Entra ID로 전송되는 AuthnRequest 요소에서 선택 사항입니다.

메모

RequestedAuthnContext SAML 요청에 포함된 경우 Comparison 요소를 exact설정해야 합니다.

Microsoft Entra ID는 다음 AuthnContextClassRef 값을 지원합니다.

인증 방법 인증 컨텍스트 클래스 URI
Kerberos urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos
사용자 이름 및 암호 urn:oasis:names:tc:SAML:2.0:ac:classes:Password
PGP 공개 키 인프라 urn:oasis:names:tc:SAML:2.0:ac:classes:PGP
원격 암호 보안 urn:oasis:names:tc:SAML:2.0:ac:classes:SecureRemotePassword
XML 디지털 서명 urn:oasis:names:tc:SAML:2.0:ac:classes:XMLDSig
간단한 공개 키 인프라 urn:oasis:names:tc:SAML:2.0:ac:classes:SPKI
스마트 카드 urn:oasis:names:tc:SAML:2.0:ac:classes:Smartcard
묶은 프라이빗 키 및 PIN이 있는 스마트 카드 urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI
TLS(전송 계층 보안) 클라이언트 urn:oasis:names:tc:SAML:2.0:ac:classes:TLSClient
불특정 urn:oasis:names:tc:SAML:2.0:ac:classes:Unspecified
X.509 인증서 urn:oasis:names:tc:SAML:2.0:ac:classes:X509
Windows 통합 인증 urn:federation:authentication:windows

범위

ID 공급자 목록을 포함하는 Scoping 요소는 Microsoft Entra ID로 전송되는 AuthnRequest 요소에서 선택 사항입니다.

제공된 경우 지원되지 않으므로 ProxyCount 특성, IDPListOption 또는 RequesterID 요소를 포함하지 마세요.

서명

AuthnRequest 요소의 Signature 요소는 선택 사항입니다. 서명된 인증 요청의 요구 사항을 적용하도록 Microsoft Entra ID를 구성할 수 있습니다. 사용하도록 설정하면 서명된 인증 요청만 수락되고, 그렇지 않으면 등록된 Assertion Consumer Service URL에만 응답하여 요청자 확인이 제공됩니다.

제목

Subject 요소를 포함하지 마세요. Microsoft Entra ID는 AuthnRequest 제목 지정을 지원하지 않으며 제공된 경우 오류를 반환합니다.

대신 주체의 NameID를 매개 변수 값으로 사용하여 http 요청에 login_hint 매개 변수를 Single Sign-On URL에 추가하여 주체를 제공할 수 있습니다.

응답

요청된 로그온이 성공적으로 완료되면 Microsoft Entra ID가 클라우드 서비스에 응답을 게시합니다. 성공적인 로그온 시도에 대한 응답은 다음 샘플과 같습니다.

<samlp:Response ID="_a4958bfd-e107-4e67-b06d-0d85ade2e76a" Version="2.0" IssueInstant="2013-03-18T07:38:15.144Z" Destination="https://contoso.com/identity/inboundsso.aspx" InResponseTo="C2dE3fH4iJ5kL6mN7oP8qR9sT0uV1w" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
  <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://login.microsoftonline.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
  <ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
    ...
  </ds:Signature>
  <samlp:Status>
    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
  </samlp:Status>
  <Assertion ID="_bf9c623d-cc20-407a-9a59-c2d0aee84d12" IssueInstant="2013-03-18T07:38:15.144Z" Version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
    <Issuer>https://login.microsoftonline.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
    <ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
      ...
    </ds:Signature>
    <Subject>
      <NameID>Uz2Pqz1X7pxe4XLWxV9KJQ+n59d573SepSAkuYKSde8=</NameID>
      <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
        <SubjectConfirmationData InResponseTo="id758d0ef385634593a77bdf7e632984b6" NotOnOrAfter="2013-03-18T07:43:15.144Z" Recipient="https://contoso.com/identity/inboundsso.aspx" />
      </SubjectConfirmation>
    </Subject>
    <Conditions NotBefore="2013-03-18T07:38:15.128Z" NotOnOrAfter="2013-03-18T08:48:15.128Z">
      <AudienceRestriction>
        <Audience>https://www.contoso.com</Audience>
      </AudienceRestriction>
    </Conditions>
    <AttributeStatement>
      <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name">
        <AttributeValue>testuser@contoso.com</AttributeValue>
      </Attribute>
      <Attribute Name="http://schemas.microsoft.com/identity/claims/objectidentifier">
        <AttributeValue>3F2504E0-4F89-11D3-9A0C-0305E82C3301</AttributeValue>
      </Attribute>
      ...
    </AttributeStatement>
    <AuthnStatement AuthnInstant="2013-03-18T07:33:56.000Z" SessionIndex="_bf9c623d-cc20-407a-9a59-c2d0aee84d12">
      <AuthnContext>
        <AuthnContextClassRef> urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
      </AuthnContext>
    </AuthnStatement>
  </Assertion>
</samlp:Response>

응답

Response 요소에는 권한 부여 요청의 결과가 포함됩니다. Microsoft Entra ID는 Response 요소의 ID, VersionIssueInstant 값을 설정합니다. 또한 다음 특성을 설정합니다.

  • Destination: 로그온이 성공적으로 완료되면 서비스 공급자(클라우드 서비스)의 RedirectUri 설정됩니다.
  • InResponseTo: 응답을 시작한 AuthnRequest 요소의 ID 특성으로 설정됩니다.

발급자

Microsoft Entra ID는 <TenantIDGUID> Microsoft Entra 테넌트 ID인 https://sts.windows.net/<TenantIDGUID>/Issuer 요소를 설정합니다.

예를 들어 Issuer 요소의 응답은 다음 샘플과 같이 표시할 수 있습니다.

<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>

상태

Status 요소는 로그온의 성공 또는 실패를 전달합니다. 여기에는 요청 상태를 나타내는 코드 또는 중첩된 코드 집합이 포함된 StatusCode 요소가 포함됩니다. 또한 로그온 프로세스 중에 생성된 사용자 지정 오류 메시지가 포함된 StatusMessage 요소도 포함됩니다.

다음 샘플은 실패한 로그온 시도에 대한 SAML 응답입니다.

<samlp:Response ID="_f0961a83-d071-4be5-a18c-9ae7b22987a4" Version="2.0" IssueInstant="2013-03-18T08:49:24.405Z" InResponseTo="iddce91f96e56747b5ace6d2e2aa9d4f8c" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
  <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
  <samlp:Status>
    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Requester">
      <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:RequestUnsupported" />
    </samlp:StatusCode>
    <samlp:StatusMessage>AADSTS75006: An error occurred while processing a SAML2 Authentication request. AADSTS90011: The SAML authentication request property 'NameIdentifierPolicy/SPNameQualifier' is not supported.
    Trace ID: 0000aaaa-11bb-cccc-dd22-eeeeee333333
    Timestamp: 2013-03-18 08:49:24Z</samlp:StatusMessage>
    </samlp:Status>
</samlp:Response>

주장

microsoft Entra ID는 ID, IssueInstantVersion외에도 응답의 Assertion 요소에서 다음 요소를 설정합니다.

발급자

<TenantIDGUID> Microsoft Entra 테넌트 테넌트 ID인 https://sts.windows.net/<TenantIDGUID>/설정됩니다.

<Issuer>https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>

서명

Microsoft Entra ID는 성공적인 로그온에 대한 응답으로 어설션에 서명합니다. Signature 요소에는 클라우드 서비스가 어설션의 무결성을 확인하기 위해 원본을 인증하는 데 사용할 수 있는 디지털 서명이 포함되어 있습니다.

이 디지털 서명을 생성하기 위해 Microsoft Entra ID는 메타데이터 문서의 IDPSSODescriptor 요소에 서명 키를 사용합니다.

<ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
  digital_signature_here
</ds:Signature>

제목

어설션에서 문의 주체인 원칙을 지정합니다. 인증된 사용자를 나타내는 NameID 요소가 포함되어 있습니다. NameID 값은 토큰의 대상 그룹인 서비스 공급자에게만 전달되는 대상 식별자입니다. 그것은 영구적입니다 - 취소 할 수 있지만 다시 할당되지 않습니다. 또한 사용자에 대해 아무것도 표시하지 않으며 특성 쿼리의 식별자로 사용할 수 없다는 측면에서 불투명합니다.

SubjectConfirmation 요소의 Method 특성은 항상 urn:oasis:names:tc:SAML:2.0:cm:bearer.

<Subject>
  <NameID>Uz2Pqz1X7pxe4XLWxV9KJQ+n59d573SepSAkuYKSde8=</NameID>
  <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
    <SubjectConfirmationData InResponseTo="id758d0ef385634593a77bdf7e632984b6" NotOnOrAfter="2013-03-18T07:43:15.144Z" Recipient="https://contoso.com/identity/inboundsso.aspx" />
  </SubjectConfirmation>
</Subject>

여건

이 요소는 SAML 어설션의 허용 가능한 사용을 정의하는 조건을 지정합니다.

<Conditions NotBefore="2013-03-18T07:38:15.128Z" NotOnOrAfter="2013-03-18T08:48:15.128Z">
  <AudienceRestriction>
    <Audience>https://www.contoso.com</Audience>
  </AudienceRestriction>
</Conditions>

NotBeforeNotOnOrAfter 특성은 어설션이 유효한 간격을 지정합니다.

  • NotBefore 특성의 값은 Assertion 요소의 IssueInstant 특성 값보다 같거나 약간(1초 미만) 늦습니다. Microsoft Entra ID는 자체와 클라우드 서비스(서비스 공급자) 간의 시간 차이를 고려하지 않으며, 이번에는 버퍼를 추가하지 않습니다.
  • NotOnOrAfter 특성의 값은 NotBefore 특성 값보다 70분 후입니다.

관객

여기에는 의도한 대상 그룹을 식별하는 URI가 포함됩니다. Microsoft Entra ID는 이 요소의 값을 로그온을 시작한 AuthnRequestIssuer 요소의 값으로 설정합니다. Audience 값을 평가하려면 애플리케이션 등록 중에 지정된 App ID URI 값을 사용합니다.

<AudienceRestriction>
  <Audience>https://www.contoso.com</Audience>
</AudienceRestriction>

Issuer 값과 마찬가지로 Audience 값은 Microsoft Entra ID의 클라우드 서비스를 나타내는 서비스 주체 이름 중 하나와 정확히 일치해야 합니다. 그러나 Issuer 요소의 값이 URI 값이 아닌 경우 응답의 Audience 값은 spn:접두사로 Issuer 값입니다.

AttributeStatement

여기에는 주체 또는 사용자에 대한 클레임이 포함됩니다. 다음 발췌문에는 샘플 AttributeStatement 요소가 포함되어 있습니다. 줄임표는 요소에 여러 특성 및 특성 값을 포함할 수 있음을 나타냅니다.

<AttributeStatement>
  <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name">
    <AttributeValue>testuser@contoso.com</AttributeValue>
  </Attribute>
  <Attribute Name="http://schemas.microsoft.com/identity/claims/objectidentifier">
    <AttributeValue>3F2504E0-4F89-11D3-9A0C-0305E82C3301</AttributeValue>
  </Attribute>
  ...
</AttributeStatement>
  • 이름 클레임 - Name 특성(http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name)의 값은 인증된 사용자의 사용자 계정 이름(예: testuser@managedtenant.com)입니다.
  • ObjectIdentifier 클레임 - ObjectIdentifier 특성(http://schemas.microsoft.com/identity/claims/objectidentifier)의 값은 Microsoft Entra ID에서 인증된 사용자를 나타내는 디렉터리 개체의 ObjectId. ObjectId 변경할 수 없는 전역적으로 고유하며 인증된 사용자의 안전 식별자를 다시 사용할 수 있습니다.

AuthnStatement

이 요소는 어설션 주체가 특정 시간에 특정 수단에 의해 인증되었다고 어설션합니다.

  • AuthnInstant 특성은 사용자가 Microsoft Entra ID를 사용하여 인증한 시간을 지정합니다.
  • AuthnContext 요소는 사용자를 인증하는 데 사용되는 인증 컨텍스트를 지정합니다.
<AuthnStatement AuthnInstant="2013-03-18T07:33:56.000Z" SessionIndex="_bf9c623d-cc20-407a-9a59-c2d0aee84d12">
  <AuthnContext>
    <AuthnContextClassRef> urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
  </AuthnContext>
</AuthnStatement>