Azure Active Directory B2C 中的單一登入工作階段提供者

設定 Azure Active Directory B2C 中的工作階段行為一文中,我們會說明 Azure AD B2C 自訂原則的工作階段管理。 本文說明如何在您的自訂原則中,進一步設定單一登入 (SSO) 行為的個別技術設定檔。

例如,假設已針對租用戶範圍的 SSO 設定原則,但不論使用中的 SSO 工作階段為何,您都想要執行多重要素步驟。 您可以藉由設定多重要素技術設定檔的工作階段提供者來達成此行為。

您可以將工作階段提供者套用至兩個流程:

  • 全新登入
    • 當使用者第一次登入時,不會產生工作階段。 任何使用工作階段提供者的技術設定檔都會成為工作階段參與者。
    • 工作階段提供者可以將宣告寫入工作階段 Cookie 中。
  • 後續登入
    • 當使用者有使用中的工作階段時,屬於工作階段 Cookie 一部分的宣告會讀入宣告包中。
    • 屬於工作階段 Cookie 一部分的宣告無法更新。
    • 工作階段提供者可以對宣告包發出額外的宣告,表示此技術設定檔是在 SSO 狀況下執行。
    • 技術設定檔可以略過。

根據為指定技術設定檔選擇的工作階段管理提供者,工作階段行為可以是使用中或已隱藏。 下列清單顯示使用工作階段提供者的各種可能範例:

  • 在後續登入 (SSO) 期間,防止或強制執行使用者介面中斷。
  • 在後續登入 (SSO) 期間,記住所選擇的識別提供者。
  • 在後續登入 (SSO) 期間,減少讀取至目錄中的作業數量。
  • 追蹤社交識別提供者工作階段,以執行識別提供者登出。
  • 追蹤登入的信賴憑證者應用程式以進行單一登出。

工作階段提供者

有五個工作階段提供者可用來管理技術設定檔處理 SSO 工作階段的方式。 在設定技術設定檔時,您必須選擇最適當的工作階段提供者。

下表顯示根據您要管理的技術設定檔類型,應使用的工作階段提供者。 某些工作階段提供者允許讀取和寫入工作階段 Cookie 的宣告。

工作階段提供者 適用的技術設定檔類型 目的 寫入宣告 讀取宣告
DefaultSSOSessionProvider 自我判斷提示、Microsoft Entra識別碼Microsoft Entra多重要素驗證宣告轉換 略過技術設定檔執行。
ExternalLoginSSOSessionProvider OAuth1 身分識別提供者Oauth2 識別提供者OpenID Connect 識別提供者SAML 識別提供者 加速識別提供者選取頁面。 執行單一登出。
OAuthSSOSessionProvider JWT 權杖簽發者 管理 OAuth2 或 OpenID Connect 信賴憑證者和 Azure AD B2C 之間的工作階段。 執行單一登出。
SamlSSOSessionProvider SAML 權杖簽發者 管理 SAML 信賴憑證者與 Azure AD B2C 之間的工作階段。 執行單一登出。
NoopSSOSessionProvider 任意 防止任何技術設定檔成為工作階段的一部分。

下圖顯示 Azure AD B2C 所使用的工作階段類型。

此圖顯示 Azure AD B2C 類型的工作階段提供者。

參考工作階段提供者

若要使用技術設定檔中的工作階段提供者:

  1. 建立適當的工作階段管理技術設定檔。 請注意,Azure AD B2C 入門套件包含最常見的工作階段管理技術設定檔。 您可以參考現有的工作階段管理技術設定檔 (如果適用)。

    下列 XML 程式碼片段展示入門套件的 SM-AAD 工作階段管理技術設定檔。 提供工作階段的類型為 DefaultSSOSessionProvider

    <TechnicalProfile Id="SM-AAD">
      <DisplayName>Session Mananagement Provider</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.DefaultSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <PersistedClaims>
        <PersistedClaim ClaimTypeReferenceId="objectId" />
        <PersistedClaim ClaimTypeReferenceId="signInName" />
        <PersistedClaim ClaimTypeReferenceId="authenticationSource" />
        <PersistedClaim ClaimTypeReferenceId="identityProvider" />
        <PersistedClaim ClaimTypeReferenceId="newUser" />
        <PersistedClaim ClaimTypeReferenceId="executed-SelfAsserted-Input" />
      </PersistedClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="objectIdFromSession" DefaultValue="true" />
      </OutputClaims>
    </TechnicalProfile>
    
  2. 請參考技術設定檔中的工作階段管理技術設定檔。 如此一來,您就可以控制該技術設定檔在後續登入 (SSO) 期間的行為。

    若要從技術設定檔參考工作階段管理技術設定檔,請新增 UseTechnicalProfileForSessionManagement 元素。 下列範例示範如何使用 SM-AAD 工作階段管理技術設定檔。 將 ReferenceId 變更為工作階段管理技術設定檔的識別碼。

    <TechnicalProfile Id="{Technical-profile-ID}">
      ...
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
    </TechnicalProfile>
    

重要

當技術設定檔未參考任何工作階段管理提供者時,將會套用 DefaultSSOSessionProvider 工作階段提供者,這可能會導致非預期的行為。

注意

在重新整理權杖流程期間,不會叫用工作階段管理提供者。 所有發出新存取權杖的嘗試,都是已發出原始宣告的複本。

管理工作階段宣告

工作階段管理技術設定檔會在自訂原則執行期間,控制可讀取、寫入或輸出的宣告。

在工作階段管理技術設定檔中,使用 PersistedClaimsOutputClaims 元素來管理宣告。

  • 保存的宣告:可寫入工作階段 Cookie 的宣告。
    • 針對要寫入工作階段 Cookie 的宣告,該宣告必須是目前宣告包的一部分。
    • 在後續登入 (單一登入) 期間自動傳回所有寫入的宣告。 您不需要指定輸出宣告。
  • 輸出宣告:在後續登入 (單一登入) 期間可輸出到宣告包的額外宣告。 由於工作階段不會傳回輸出宣告,所以您必須設定預設值。

下列 XML 程式碼片段會示範保存和輸出宣告元素:

<TechnicalProfile Id="SM-AAD">
  <DisplayName>Session Management Provider</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.DefaultSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <PersistedClaims>
    <PersistedClaim ClaimTypeReferenceId="objectId" />
  </PersistedClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="objectIdFromSession" DefaultValue="true"/>
  </OutputClaims>
</TechnicalProfile>

DefaultSSOSessionProviderExternalLoginSSOSessionProvider 工作階段管理提供者可設定用於管理宣告,例如在下列期間:

  • 全新登入
    • PersistedClaims 元素會將宣告寫入工作階段 Cookie 中。 無法重寫保存的宣告。
  • 後續登入
    • 寫入至工作階段 Cookie 的每個宣告都將輸出到宣告包中,可在下一個協調流程步驟中使用。
    • OutputClaims 元素會將靜態宣告輸出到宣告包中。 您可以使用 DefaultValue 屬性來設定輸出宣告的值。

DefaultSSOSessionProvider

DefaultSSOSessionProvider 工作階段提供者可設定用於在後續登入 (單一登入) 時管理宣告,並允許略過技術設定檔。 DefaultSSOSessionProvider 應該用來保存和發出後續協調步驟所需的宣告,這些宣告在後續登入 (單一登入) 時無法取得。 例如,可能透過從目錄中讀取使用者物件而取得的宣告。

下列 SM-AAD 技術設定檔是 DefaultSSOSessionProvider 工作階段提供者的類型。 您可以在自訂原則入門套件中找到 SM-AAD 技術設定檔。

<TechnicalProfile Id="SM-AAD">
  <DisplayName>Session Management Provider</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.DefaultSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <PersistedClaims>
    <PersistedClaim ClaimTypeReferenceId="objectId" />
    <PersistedClaim ClaimTypeReferenceId="signInName" />
    <PersistedClaim ClaimTypeReferenceId="authenticationSource" />
    <PersistedClaim ClaimTypeReferenceId="identityProvider" />
    <PersistedClaim ClaimTypeReferenceId="newUser" />
    <PersistedClaim ClaimTypeReferenceId="executed-SelfAsserted-Input" />
  </PersistedClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="objectIdFromSession" DefaultValue="true"/>
  </OutputClaims>
</TechnicalProfile>

例如,SM-AAD 工作階段管理技術設定檔會使用 DefaultSSOSessionProvider 工作階段提供者。 套用至來自自訂原則入門套件SelfAsserted-LocalAccountSignin-Email 技術設定檔時,將會有如下行為:

  • 全新登入
    • signInName 將會寫入工作階段 Cookie 中,因為工作階段管理技術設定檔 (SM AAD) 已由 signInName 設定為要保存,而參考 SM AAD 的技術設定檔包含 signInNameOutputClaim。 此行為適用於所有符合此模式的宣告。
  • 後續登入
    • 系統會略過技術設定檔,且使用者不會看到登入頁面。
    • 宣告包將包含 signInName 工作階段 Cookie 中的值,這是在新登入時保存的值,而任何其他符合模式的宣告則會保存到工作階段 Cookie 中。
    • 工作階段管理技術設定檔會傳回 objectIdFromSession 宣告,因為工作階段提供者的 Output 宣告會在後續登入 (單一登入) 期間處理。 在此情況下,objectIdFromSession 宣告會出現在宣告包中,表示由於單一登入,使用者的宣告來自工作階段 Cookie。

ExternalLoginSSOSessionProvider

ExternalLoginSSOSessionProvider 工作階段提供者可用來略過 [識別提供者選取] 畫面,並從同盟識別提供者登出。 它通常會在為同盟識別提供者設定的技術設定檔中參考,例如 Facebook 或Microsoft Entra識別碼。

  • 全新登入
    • PersistedClaims 元素會將宣告寫入工作階段 Cookie 中。 無法重寫保存的宣告。
  • 後續登入
    • 寫入至工作階段 Cookie 的每個宣告都將輸出到宣告包中,可在下一個協調流程步驟中使用。
    • OutputClaims 元素會將靜態宣告輸出到宣告包中。 使用 DefaultValue 屬性設定宣告的值。
    • 當參考工作階段管理技術設定檔的技術設定檔中,包含已保存到工作階段 Cookie 的 OutputClaim 時,將會略過此技術設定檔。

下列 SM-SocialLogin 技術設定檔是 ExternalLoginSSOSessionProvider 工作階段提供者的類型。 您可以在自訂政策入門套件中找到 SM-SocialLogin 技術設定檔。

<TechnicalProfile Id="SM-SocialLogin">
  <DisplayName>Session Management Provider</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.ExternalLoginSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <PersistedClaims>
    <PersistedClaim ClaimTypeReferenceId="AlternativeSecurityId" />
  </PersistedClaims>
</TechnicalProfile>

當使用者使用外部識別提供者登入時,就會產生 AlternativeSecurityId 宣告。 表示外部識別提供者使用者的唯一識別碼。 AlternativeSecurityId 宣告會進行保存,因此在單一登入旅程上,您可以從目錄中讀取使用者的設定檔,而不需要與同盟識別提供者進行任何互動。

若要設定外部工作階段提供者,請從您的 OAuth1OAuth2OpenID Connect 技術設定檔中新增對 SM-SocialLogin 的參考。 例如,Facebook-OAUTH 會使用 SM-SocialLogin 工作階段管理技術設定檔。 如需詳細資訊,請參閱自訂原則入門套件

<TechnicalProfile Id="Facebook-OAUTH">
  ...
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" />
</TechnicalProfile>

OAuthSSOSessionProvider

OAuthSSOSessionProvider 工作階段提供者可用來管理 OAuth2 或 OpenID Connect 信賴憑證者和 Azure AD B2C 之間的 Azure AD B2C 工作階段。 Azure AD B2C 支援單一登出,也稱為單一登出 (SLO) 。 當使用者透過 Azure AD B2C 登出端點登出時,Azure AD B2C 會從瀏覽器清除使用者的工作階段 Cookie。 不過,使用者可能仍然登入其他使用 Azure AD B2C 進行驗證的應用程式。

這種類型的工作階段提供者可讓 Azure AD B2C 追蹤使用者登入的所有 OAuth2 或 OpenID Connect 應用程式。 在登出某個應用程式時,Azure AD B2C 會嘗試呼叫所有其他已知登入應用程式的 logout 端點。 這項功能已內建於工作階段提供者中。 沒有可供設定的保存或輸出宣告。 下列 SM-jwt-issuer 技術設定檔是 OAuthSSOSessionProvider 工作階段提供者的類型。

<TechnicalProfile Id="SM-jwt-issuer">
  <DisplayName>Session Management Provider</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.OAuthSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</TechnicalProfile>

SM-jwt-issuer 技術設定檔會受到 JwtIssuer 技術設定檔參考:

<TechnicalProfile Id="JwtIssuer">
  ...
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-jwt-issuer" />
</TechnicalProfile>

SamlSSOSessionProvider

SamlSSOSessionProvider 工作階段提供者可用來管理同盟 SAML 識別提供者或 SAML 信賴憑證者應用程式和 Azure AD B2C 的工作階段行為。

SAML 識別提供者工作階段管理

當您從 SAML 識別提供者工作階段參考 SamlSSOSessionProvider 工作階段提供者時,必須將 RegisterServiceProviders 設定為 false

下列 SM-Saml-idp 技術設定檔是 SamlSSOSessionProvider 工作階段提供者的類型:

<TechnicalProfile Id="SM-Saml-idp">
  <DisplayName>Session Management Provider</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.SamlSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="RegisterServiceProviders">false</Item>
  </Metadata>
</TechnicalProfile>

若要使用 SM-Saml-idp 工作階段管理技術設定檔,請將參考新增至您的 SAML 識別提供者技術設定檔。 例如,AD FS SAML 識別提供者Contoso-SAML2 會使用 SM-Saml-idp 工作階段管理技術設定檔。

<TechnicalProfile Id="Contoso-SAML2">
  ...
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-Saml-idp" />
</TechnicalProfile>

SAML 服務提供者工作階段管理

參考 SamlSSOSessionProvider 工作階段提供者來管理 SAML 信賴憑證者工作階段時,必須將 RegisterServiceProviders 設定為 true。 SAML 工作階段登出需要 SessionIndexNameID 才能完成。

下列 SM-Saml-issuer 技術設定檔是 SamlSSOSessionProvider 工作階段提供者的類型:

<TechnicalProfile Id="SM-Saml-issuer">
  <DisplayName>Session Management Provider</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.SamlSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</TechnicalProfile>

若要使用 SM-Saml-issuer 工作階段管理技術設定檔,請將參考新增至您的 SAML 權杖簽發者技術設定檔。 例如,Saml2AssertionIssuer 技術設定檔會使用 SM-Saml-issuer 工作階段管理技術設定檔。

<TechnicalProfile Id="Saml2AssertionIssuer">
  ...
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-Saml-issuer" />
</TechnicalProfile>

中繼資料

屬性 必要 描述
IncludeSessionIndex No 目前未使用,可以忽略。
RegisterServiceProviders No 指出提供者應該註冊所有已發行判斷提示的 SAML 服務提供者。 可能的值:true (預設) 或 false

NoopSSOSessionProvider

NoopSSOSessionProvider 工作階段提供者可用來抑制單一登入行為。 使用這類工作階段提供者的技術設定檔一律會進行處理,即使使用者有使用中的工作階段也一樣。 若要強制特定技術設定檔一律執行,則這種類型的工作階段提供者可能很實用,例如:

  • 宣告轉換:建立或轉換稍後用來決定要處理或略過哪些協調流程步驟的宣告。
  • Restful:每次原則執行時,從 Restful 服務撷取更新的資料。 您也可以呼叫 Restful 進行擴充記錄和稽核。
  • 自我判斷:強制使用者在每次原則執行時提供資料。 例如,請使用一次性密碼來驗證電子郵件,或要求使用者同意。
  • Phonefactor - 強制使用者在後續登入期間執行多重要素驗證,即使後續登入 (單一登入) 也一樣。

這種類型的工作階段提供者不會將宣告保存至使用者的工作階段 Cookie。 下列 SM-Noop 技術設定檔是 NoopSSOSessionProvider 工作階段提供者的類型。 您可以在自訂原則入門套件中找到 SM-Noop 技術設定檔。

<TechnicalProfile Id="SM-Noop">
  <DisplayName>Noop Session Management Provider</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.NoopSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</TechnicalProfile>

若要隱藏技術設定檔的單一登入行為,請在 SM-Noop 中新增對技術設定檔的參考。 例如,AAD-Common 會使用 SM-Noop 工作階段管理技術設定檔。 如需詳細資訊,請參閱自訂原則入門套件

<TechnicalProfile Id="AAD-Common">
  ...
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

後續步驟

了解如何設定工作階段行為