次の方法で共有


シングル サインオン SAML プロトコル

この記事では、Microsoft Entra ID がシングル サインオン (SSO) に対してサポートする SAML 2.0 認証要求と応答について説明します。

次のプロトコル図では、シングル サインオン シーケンスについて説明します。 クラウド サービス (サービス プロバイダー) は、HTTP リダイレクト バインドを使用して、AuthnRequest (認証要求) 要素を Microsoft Entra ID (ID プロバイダー) に渡します。 その後、Microsoft Entra ID は HTTP ポスト バインディングを使用して、Response 要素をクラウド サービスに投稿します。

シングル Sign-On (SSO) ワークフローのスクリーンショット。

手記

この記事では、シングル サインオンに SAML を使用する方法について説明します。 シングル サインオンを処理するその他の方法 (OpenID Connect または統合 Windows 認証の使用など) の詳細については、「Microsoft Entra IDのアプリケーションへのシングル サインオン」を参照してください。

AuthnRequest

ユーザー認証を要求するために、クラウド サービスは microsoft Entra ID に AuthnRequest 要素を送信します。 サンプルの 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 が存在する場合にセッション Cookie を使用して、ユーザーの操作なしでユーザーをサイレント認証する必要があるかどうかを指定するブール値です。 これが true の場合、Microsoft Entra ID はセッション Cookie を使用してユーザーの認証を試みます。

などの他のすべての 属性は、無視

Microsoft Entra ID は、AuthnRequest内の Conditions 要素も無視します。

発行者

AuthnRequestIssuer 要素は、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 は、現在の SSO 操作に固有のランダムに生成された値として、NameID 要求を発行します。 これは、値が一時的であり、認証ユーザーを識別するために使用できないことを意味します。

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
Smartcard 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 を使用して、シングル サインオン URL に login_hint パラメーターを HTTP 要求に追加することで、サブジェクトを指定できます。

応答

要求されたサインオンが正常に完了すると、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 要素の IDVersion、および IssueInstant 値を設定します。 また、次の属性も設定します。

  • Destination: サインオンが正常に完了すると、サービス プロバイダー (クラウド サービス) の RedirectUri に設定されます。
  • InResponseTo: 応答を開始した AuthnRequest 要素の ID 属性に設定されます。

発行者

Microsoft Entra ID は、Issuer 要素を https://sts.windows.net/<TenantIDGUID>/ に設定します。ここで、<TenantIDGUID> は Microsoft Entra テナントのテナント ID です。

たとえば、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 は、IDIssueInstant、および Versionに加えて、応答の 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>

NotBefore 属性と NotOnOrAfter 属性は、アサーションが有効な間隔を指定します。

  • NotBefore 属性の値は、Assertion 要素の属性の値より少し遅い (1 秒未満) IssueInstant。 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>