分享方式:


使用 Azure Active Directory B2C 設定 SAML 識別提供者選項

Azure Active Directory B2C (Azure AD B2C) 支援與 SAML 2.0 識別提供者的同盟。 本文說明如何剖析安全性判斷提示,以及使用 SAML 識別提供者啟用登入時可用的組態選項。

開始之前,使用 [選擇原則類型] 選取器來選擇您要設定的原則類型。 Azure Active Directory B2C 提供兩種方法來定義使用者如何與您的應用程式互動:透過預先定義的使用者流程,或透過完全可設定的自訂原則。 此文章中所需的步驟隨各方法而異。

此功能僅適用於自訂原則。 如需設定步驟,請在前述選取器中選取 [自訂原則]。

宣告對應

OutputClaims 元素包含 SAML 識別提供者傳回的宣告清單。 您需要將原則中定義的宣告名稱對應至識別提供者中定義的名稱。 請檢查識別提供者是否有宣告清單 (判斷提示)。 您也可以檢查識別提供者所傳回的 SAML 回應內容。 如需詳細資訊,請參閱對 SAML 訊息進行偵錯。 若要新增宣告,請先定義宣告,然後將宣告新增至輸出宣告集合。

您也可以包含不由識別提供者傳回的宣告,只要您設定 DefaultValue 屬性即可。 預設值可以是靜態或動態,並使用內容宣告

輸出宣告元素包含下列屬性:

  • ClaimTypeReferenceId 是宣告類型的參考。
  • PartnerClaimType 是出現在 SAML 判斷提示中的屬性名稱。
  • DefaultValue 是預先定義的預設值。 如果宣告是空的,則會使用預設值。 您也可以使用具有內容值的宣告解析程式,例如相互關聯識別碼或使用者 IP 位址。

主體名稱

若要讀取主體中的 SAML 判斷提示 NameId 作為正規化宣告,請將宣告 PartnerClaimType 設定為 SPNameQualifier 屬性的值。 SPNameQualifier如果未顯示內容,請將宣告PartnerClaimType設定為屬性的值 NameQualifier

SAML 判斷提示:

<saml:Subject>
  <saml:NameID SPNameQualifier="http://your-idp.com/unique-identifier" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">david@contoso.com</saml:NameID>
  <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
    <SubjectConfirmationData InResponseTo="_cd37c3f2-6875-4308-a9db-ce2cf187f4d1" NotOnOrAfter="2020-02-15T16:23:23.137Z" Recipient="https://<your-tenant>.b2clogin.com/<your-tenant>.onmicrosoft.com/B2C_1A_TrustFrameworkBase/samlp/sso/assertionconsumer" />
    </SubjectConfirmation>
  </saml:SubjectConfirmation>
</saml:Subject>

輸出宣告:

<OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="http://your-idp.com/unique-identifier" />

如果 SAML 判斷提示中未顯示這兩個 SPNameQualifierNameQualifier 屬性,請將宣告 PartnerClaimType 設定為 assertionSubjectName 。 請確定 NameId 是判斷提示 XML 中的第一個值。 如果您定義一個以上的判斷提示,Azure AD B2C 會挑選最後一個判斷提示中的主體值。

設定 SAML 通訊協定繫結

會依照識別提供者的中繼資料 SingleSignOnService 元素中的指定,將 SAML 要求傳送給識別提供者。 大部分識別提供者的授權要求都會直接在 HTTP GET 要求的 URL 查詢字串中執行 (因為訊息相對較短)。 請參閱識別提供者文件,以瞭解如何設定這兩個 SAML 要求的繫結。

下列 XML 是具有兩個系結的Microsoft Entra中繼資料單一登入服務的範例。 HTTP-Redirect 優先於 HTTP-POST,因為其會先出現在 SAML 識別提供者中繼資料中。

<IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
  ...
  <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://login.microsoftonline.com/00000000-0000-0000-0000-000000000000/saml2"/>
  <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://login.microsoftonline.com/00000000-0000-0000-0000-000000000000/saml2"/>
</IDPSSODescriptor>

判斷提示取用者服務

判斷提示取用者服務 (或 ACS) 是 Azure AD B2C 傳送和接收識別提供者 SAML 回應的位置。 SAML 回應會透過 HTTP POST 繫結傳輸到 Azure AD B2C。 ACS 位置會指向信賴憑證者的基底原則。 例如,如果信賴原則是 B2C_1A_signup_signin,則 ACS 就是 B2C_1A_signup_signin 的基底原則,例如 B2C_1A_TrustFrameworkBase

下列 XML 是 Azure AD B2C 原則中繼資料判斷提示取用者服務專案的範例。

<SPSSODescriptor AuthnRequestsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
  ...
  <AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://your-tenant.b2clogin.com/your-tenant/B2C_1A_TrustFrameworkBase/samlp/sso/assertionconsumer" index="0" isDefault="true"/>
</SPSSODescriptor>

設定 SAML 要求簽章

Azure AD B2C 會使用 SamlMessageSigning 密碼編譯金鑰簽署所有傳出驗證要求。 若要停用 SAML 要求簽章,請將 WantsSignedRequests 設定為 false。 如果將中繼資料設定為 false,則會略過要求中的 SigAlgSignature 參數 (查詢字串或張貼參數)。

此中繼資料也會控制 AuthnRequestsSigned 屬性,其包含在要與識別提供者共用之 Azure AD B2C 技術設定檔的中繼資料內。 如果技術設定檔中繼資料中的 WantsSignedRequests 值設為 false,以及識別提供者中繼資料 WantAuthnRequestsSigned 設為 false 或未指定,則 Azure AD B2C 不會簽署要求。

下列範例會將簽章從 SAML 要求中移除。

<Metadata>
  ...
  <Item Key="WantsSignedRequests">false</Item>
</Metadata>

簽章演算法

Azure AD B2C 使用 Sha1 來簽署 SAML 要求。 使用 XmlSignatureAlgorithm 中繼資料來設定要使用的演算法。 可能的值為:Sha256Sha384Sha512Sha1 (預設)。 此中繼資料會控制 SAML 要求中 SigAlg 參數 (查詢字串或張貼參數) 的值。 請確定您會使用相同的值來設定這兩端的簽章演算法。 僅使用您憑證支援的演算法。

包含金鑰資訊

當識別提供者指出 Azure AD B2C 繫結設定為 HTTP-POST 時,Azure AD B2C 會將簽章和演算法包含在 SAML 要求的主體中。 您也可以設定Microsoft Entra識別碼,以在系結設定 HTTP-POST 為 時包含憑證的公開金鑰。 使用 IncludeKeyInfo 中繼資料來 truefalse。 在下列範例中,Microsoft Entra識別碼不包含憑證的公開金鑰。

<Metadata>
  ...
  <Item Key="IncludeKeyInfo">false</Item>
</Metadata>

設定 SAML 要求名稱識別碼

SAML 授權要求 <NameID> 元素指出 SAML 名稱識別碼格式。 本節說明預設設定,以及如何自訂名稱識別碼元素。

慣用的使用者名稱

在登入使用者旅程圖期間,信賴憑證者應用程式可以將特定使用者作為目標。 Azure AD B2C 可讓您將慣用的使用者名稱傳送給 SAML 識別提供者。 InputClaims 元素是用來在 SAML 授權要求的主體內傳送 NameId

若要在授權要求中包含主體名稱識別碼,請在緊接著 <CryptographicKeys> 後新增下列 <InputClaims> 元素。 PartnerClaimType 必須設定為 subject

<InputClaims>
  <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="subject" />
</InputClaims>

在此範例中,Azure AD B2C 會在 SAML 授權要求的主體中傳送 signInName 宣告的值與 NameId

<samlp:AuthnRequest ... >
  ...
  <saml:Subject>
    <saml:NameID>sam@contoso.com</saml:NameID>
  </saml:Subject>
</samlp:AuthnRequest>

您可以使用 {OIDC:LoginHint}內容宣告,來填入宣告值。

<Metadata>
  ...
  <Item Key="IncludeClaimResolvingInClaimsHandling">true</Item>
</Metadata>
  ...
<InputClaims>
  <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="subject" DefaultValue="{OIDC:LoginHint}" AlwaysUseDefaultValue="true" />
</InputClaims>

名稱識別碼原則格式

根據預設,SAML 授權要求會指定 urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified 原則。 此名稱識別碼表示可以使用所要求主體的識別提供者所支援的任何類型的識別碼。

若要變更此行為,請查看識別提供者的文件,以瞭解哪些名稱識別碼原則可受到支援。 然後以對應的原則格式新增 NameIdPolicyFormat 中繼資料。 例如:

<Metadata>
  ...
  <Item Key="NameIdPolicyFormat">urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</Item>
</Metadata>

下列 SAML 授權要求包含名稱識別碼原則。

<samlp:AuthnRequest ... >
  ...
  <samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" />
</samlp:AuthnRequest>

允許建立新帳戶

如果您指定名稱識別碼原則格式,您也可以指定 NameIDPolicyAllowCreate 屬性,以指出是否允許識別提供者在登入流程期間建立新的帳戶。 請參閱識別提供者文件以取得指導。

Azure AD B2C 預設會忽略 AllowCreate 屬性。 您可以使用 NameIdPolicyAllowCreate 中繼資料來變更這個行為。 此中繼資料的值為 truefalse

下列範例將示範如何將 NameIDPolicyAllowCreate 屬性設定為 true

<Metadata>
  ...
  <Item Key="NameIdPolicyFormat">urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</Item>
  <Item Key="NameIdPolicyAllowCreate">true</Item>
</Metadata>

下列範例示範在授權要求中具有 NameIDPolicy 元素的 AllowCreate 的授權要求。

<samlp:AuthnRequest ... >
  ...
  <samlp:NameIDPolicy 
      Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" 
      AllowCreate="true" />
</samlp:AuthnRequest>

強制驗證

您可以藉由傳遞 SAML 驗證要求中的 ForceAuthN 屬性,強制外部 SAML IDP 提示使用者進行驗證。 您的識別提供者也必須支援此屬性。

ForceAuthN 屬性是布林值 truefalse 值。 依預設,Azure AD B2C 會將 ForceAuthN 值設定為 false。 如果會話接著會重設 (,例如在 prompt=login OIDC 中使用) ,則 ForceAuthN 值會設定為 trueForceAuthN將中繼資料設定為 true 強制對外部 IDP 的所有要求值。

下列範例會示範將 ForceAuthN 屬性設定為 true

<Metadata>
  ...
  <Item Key="ForceAuthN">true</Item>
  ...
</Metadata>

下列範例示範授權要求中的 ForceAuthN 屬性:

<samlp:AuthnRequest AssertionConsumerServiceURL="https://..."  ...
                    ForceAuthN="true">
  ...
</samlp:AuthnRequest>

提供者名稱

您可以選擇性地在 SAML 授權要求中包含 ProviderName 屬性。 將 ProviderName 中繼資料設定為包含外部 SAML IDP 之所有要求的提供者名稱。 下列範例會示範將 ProviderName 屬性設定為 Contoso app

<Metadata>
  ...
  <Item Key="ProviderName">Contoso app</Item>
  ...
</Metadata>

下列範例會示範授權要求中的 ProviderName 屬性:

<samlp:AuthnRequest AssertionConsumerServiceURL="https://..."  ...
                    ProviderName="Contoso app">
  ...
</samlp:AuthnRequest>

包含驗證內容類別參考

SAML 授權要求可包含 AuthnCoNtext 元素,以指定授權要求的內容。 元素可以包含驗證內容類別參考,這會告知 SAML 識別提供者要向使用者呈現哪些驗證機制。

若要設定驗證內容類別參考,請新增 IncludeAuthnCoNtextClassReferences 中繼資料。 在值中,指定識別驗證內容類別的一或多個 URI 參考。 以逗號分隔的清單方式指定多個 URI。 請查看識別提供者的文件,以瞭解受支援的 AuthnContextClassRef URI。

下列範例可讓使用者以使用者名稱和密碼登入,以及透過受保護工作階段 (SSL/TLS),以使用者名稱和密碼登入。

<Metadata>
  ...
  <Item Key="IncludeAuthnContextClassReferences">urn:oasis:names:tc:SAML:2.0:ac:classes:Password,urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</Item>
</Metadata>

下列 SAML 授權要求包含驗證內容類別參考。

<samlp:AuthnRequest ... >
  ...
  <samlp:RequestedAuthnContext>
    <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml:AuthnContextClassRef>
    <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef>
  </samlp:RequestedAuthnContext>
</samlp:AuthnRequest>

在授權要求中包含自訂資料

您可以選擇性地包含 Azure AD B2C 和識別提供者同意的通訊協定訊息延伸專案。 擴充項目會以 XML 格式呈現。 您可以藉由在 CDATA 元素 <![CDATA[Your Custom XML]]> 內新增 XML 資料來包含延伸模組元素。 請檢查您識別提供者的文件,以查看是否支援擴充項目。

下列範例說明如何使用延伸模組資料:

<Metadata>
  ...
  <Item Key="AuthenticationRequestExtensions"><![CDATA[
            <ext:MyCustom xmlns:ext="urn:ext:custom">
              <ext:AssuranceLevel>1</ext:AssuranceLevel>
              <ext:AssuranceDescription>Identity verified to level 1.</ext:AssuranceDescription>
            </ext:MyCustom>]]></Item>
</Metadata>

注意

根據 SAML 規格,延伸模組資料必須是命名空間限定 XML (,例如範例) 中顯示的 'urn:ext:custom',而且不能是其中一個 SAML 特定命名空間。

使用 SAML 通訊協定訊息延伸模組時,SAML 回應看起來像下列範例:

<samlp:AuthnRequest ... >
  ...
  <samlp:Extensions>
    <ext:MyCustom xmlns:ext="urn:ext:custom">
      <ext:AssuranceLevel>1</ext:AssuranceLevel>
      <ext:AssuranceDescription>Identity verified to level 1.</ext:AssuranceDescription>
    </ext:MyCustom>
  </samlp:Extensions>
</samlp:AuthnRequest>

需要簽署的 SAML 回應

Azure AD B2C 需要簽署所有傳入的判斷提示。 您可以將 WantsSignedAssertions 設定為 false,以排除這項需求。 識別提供者在此案例中不應該簽署判斷提示,但即使這樣做,Azure AD B2C 也不會驗證簽章。

WantsAssertionsSigned 中繼資料會控制 SAML 中繼資料旗標 WantAssertionsSigned,其包含在要與識別提供者共用之 Azure AD B2C 技術設定檔的中繼資料內。

<SPSSODescriptor AuthnRequestsSigned="true" WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">

如果您停用判斷提示驗證,建議您也停用回應訊息簽章驗證。 將 ResponsesSigned 中繼資料設定為 false。 身分識別提供者在此案例中不應該簽署 SAML 回應訊息,但即使這樣做,Azure AD B2C 也不會驗證簽章。

下列範例會移除訊息和判斷提示簽章:

<Metadata>
  ...
  <Item Key="WantsSignedAssertions">false</Item>
  <Item Key="ResponsesSigned">false</Item>
</Metadata>

需要加密的 SAML 回應

若要要求將所有傳入的判斷提示都進行加密,請設定 WantsEncryptedAssertions 中繼資料。 需要加密時,識別提供者會在 Azure AD B2C 技術設定檔中使用加密憑證的公開金鑰。 Azure AD B2C 會使用加密憑證的私人部分來解密回應判斷提示。

如果您啟用判斷提示加密,則可能也需要停用回應簽章驗證 (如需詳細資訊,請參閱需要簽署的 SAML 回應)。

WantsEncryptedAssertions 中繼資料設定為 true 時,Azure AD B2C 技術設定檔的中繼資料會包含加密區段。 識別提供者會讀取中繼資料,並使用 Azure AD B2C 技術設定檔中繼資料內提供的公開金鑰來加密 SAML 回應判斷提示。

下列範例顯示用於加密的 SAML 中繼資料的金鑰描述項區段:

<SPSSODescriptor AuthnRequestsSigned="true"  protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
  <KeyDescriptor use="encryption">
    <KeyInfo xmlns="https://www.w3.org/2000/09/xmldsig#">
      <X509Data>
        <X509Certificate>valid certificate</X509Certificate>
      </X509Data>
    </KeyInfo>
  </KeyDescriptor>
  ...
</SPSSODescriptor>

加密 SAML 回應判斷提示:

  1. 建立具有唯一識別碼的原則金鑰。 例如: B2C_1A_SAMLEncryptionCert

  2. 在 SAML 技術設定檔 CryptographicKeys 集合中。 將 StorageReferenceId 設定為您在第一步中建立的原則金鑰名稱。 SamlAssertionDecryption 識別碼表示使用密碼編譯金鑰來加密和解密 SAML 回應的判斷提示。

    <CryptographicKeys>
            ...
      <Key Id="SamlAssertionDecryption" StorageReferenceId="B2C_1A_SAMLEncryptionCert"/>
    </CryptographicKeys>
    
  3. 將技術設定檔中繼資料 WantsEncryptedAssertions 設定為 true

    <Metadata>
      ...
      <Item Key="WantsEncryptedAssertions">true</Item>
    </Metadata>
    
  4. 使用新的 Azure AD B2C 技術設定檔中繼資料來更新識別提供者。 您應該會看到已將 use 屬性設定為 encryptionKeyDescriptor,其中包含憑證的公開金鑰。

啟用內容宣告的使用

在輸入和輸出宣告集合中,只要您設定 屬性,您就可以包含不由識別提供者傳回的 DefaultValue 宣告。 您也可以使用要包含在技術設定檔中的內容宣告。 若要使用內容宣告:

  1. 將宣告類型新增至 BuildingBlocks 中的 ClaimsSchema 元素。

  2. 將輸出宣告新增至輸入或輸出集合。 在下列範例中,第一個宣告會設定識別提供者的值。 第二個宣告會使用使用者 IP 位址內容宣告

    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="contoso.com" AlwaysUseDefaultValue="true" />
      <OutputClaim ClaimTypeReferenceId="IpAddress" DefaultValue="{Context:IPAddress}" AlwaysUseDefaultValue="true" />
    </OutputClaims>
    

停用單一登出

當應用程式登出要求時,Azure AD B2C 會嘗試從 SAML 識別提供者登出。 如需詳細資訊,請參閱 Azure AD B2C 工作階段登出。若要停用單一登出行為,請將 SingleLogoutEnabled 中繼資料設定為 false

<Metadata>
  ...
  <Item Key="SingleLogoutEnabled">false</Item>
</Metadata>

針對 SAML 通訊協定進行偵錯

若要協助設定和偵錯 SAML 識別提供者的同盟,您可以使用 SAML 通訊協定的瀏覽器擴充功能,例如適用于 Chrome 的SAML DevTools 擴充功能、適用于 FireFox 的SAML 追蹤器,或Microsoft Edge 或 IE 開發人員工具

您可以使用這些工具,檢查 Azure AD B2C 和 SAML 識別提供者之間的整合。 例如:

  • 檢查 SAML 要求是否包含簽章,並判斷要用哪種演算法來登入授權要求。
  • 取得 AttributeStatement 一節下的宣告 (判斷提示)。
  • 檢查識別提供者是否會傳回錯誤訊息。
  • 檢查判斷提示區段是否已加密。

SAML 要求和回應範例

安全性聲明標記語言 (SAML) 是在識別提供者與服務提供者之間交換驗證和授權資料的開放標準。 當 Azure AD B2C 與 SAML 識別提供者建立同盟後,即會以服務提供者的身分向 SAML 識別提供者起始 SAML 要求,並等候 SAML 回應。

成功的 SAML 回應包含安全性 判斷提示 ,這些判斷提示是外部 SAML 識別提供者所做的語句。 Azure AD B2C 會剖析判斷 提示, 並將判斷提示對應至宣告。

授權要求

若要要求使用者驗證,Azure AD B2C 會將元素傳送 AuthnRequest 至外部 SAML 識別提供者。 SAML 2.0 AuthnRequest 範例會像下面這樣:

<samlp:AuthnRequest 
    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" 
    ID="_11111111-0000-0000-0000-000000000000" 
    Version="2.0" 
    IssueInstant="2023-03-20T07:10:00.0000000Z" 
    Destination="https://fabrikam.com/saml2" 
    ForceAuthn="false" 
    IsPassive="false" 
    ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" 
    AssertionConsumerServiceURL="https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1A_TrustFrameworkBase/samlp/sso/assertionconsumer" 
    ProviderName="https://fabrikam.com" 
    xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
    <saml:Issuer 
        Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1A_TrustFrameworkBase
    </saml:Issuer>
</samlp:AuthnRequest>

回應

當要求的登入成功完成時,外部 SAML 識別提供者會將回應張貼至 Azure AD B2C 判斷提示取用者服務 端點。 登入嘗試成功的回應看起來會像下列範例︰

<samlp:Response 
    ID="_98765432-0000-0000-0000-000000000000" 
    Version="2.0" 
    IssueInstant="2023-03-20T07:11:30.0000000Z" 
    Destination="https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1A_TrustFrameworkBase/samlp/sso/assertionconsumer" 
    InResponseTo="_11111111-0000-0000-0000-000000000000" 
    xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
    <Issuer 
        xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://fabrikam.com/
    </Issuer>
    <samlp:Status>
        <samlp:StatusCode 
            Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
    </samlp:Status>
    <Assertion 
        ID="_55555555-0000-0000-0000-000000000000" 
        IssueInstant="2023-03-20T07:40:45.505Z" 
        Version="2.0" 
        xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
        <Issuer>https://fabrikam.com/</Issuer>
        <Signature 
            xmlns="http://www.w3.org/2000/09/xmldsig#">
            ...
        </Signature>
        <Subject>
            <NameID 
                Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">ABCDEFG
            </NameID>
            ...
        </Subject>
        <AttributeStatement>
            <Attribute Name="uid">
                <AttributeValue>12345</AttributeValue>
            </Attribute>
            <Attribute Name="displayname">
                <AttributeValue>David</AttributeValue>
            </Attribute>
            <Attribute Name="email">
                <AttributeValue>david@contoso.com</AttributeValue>
            </Attribute>
            ....
        </AttributeStatement>
        <AuthnStatement 
            AuthnInstant="2023-03-20T07:40:45.505Z" 
            SessionIndex="_55555555-0000-0000-0000-000000000000">
            <AuthnContext>
                <AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
            </AuthnContext>
        </AuthnStatement>
    </Assertion>
</samlp:Response>

登出要求

當應用程式登出要求時,Azure AD B2C 會嘗試從 SAML 識別提供者登出。 Azure AD B2C 會將訊息傳送 LogoutRequest 至外部 IDP,以指出會話已終止。 下列摘錄顯示範例 LogoutRequest 元素。

元素的值 NameID 符合 NameID 要登出之使用者的 。專案 SessionIndex 符合 SessionIndex 登入 SAML 回應中的 屬性 AuthnStatement

<samlp:LogoutRequest 
    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    ID="_22222222-0000-0000-0000-000000000000" 
    Version="2.0" 
    IssueInstant="2023-03-20T08:21:07.3679354Z" 
    Destination="https://fabrikam.com/saml2/logout" 
    xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
    <saml:Issuer 
        Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1A_TrustFrameworkBase
    </saml:Issuer>
    <saml:NameID>ABCDEFG</saml:NameID>
    <samlp:SessionIndex>_55555555-0000-0000-0000-000000000000</samlp:SessionIndex>
</samlp:LogoutRequest>

後續步驟