分享方式:


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

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

例如,您可以設定全租使用者 SSO 的原則,但不論作用中的 SSO 會話為何,您一律要執行多重要素步驟。 您可以藉由設定多重要素技術配置檔的會話提供者來達成此行為。

您可以將會話提供者套用至兩個流程:

  • 全新登入
    • 當使用者第一次登入時,沒有會話。 任何使用會話提供者的技術配置檔都成為會話參與者。
    • 會話提供者可以將宣告寫入會話 Cookie。
  • 後續登入
    • 當使用者有作用中的會話時,屬於會話 Cookie 一部分的宣告會讀取到宣告包中。
    • 無法更新屬於會話 Cookie 一部分的宣告。
    • 會話提供者可以在宣告包中發出額外的宣告,指出此技術配置檔是在 SSO 條件下執行。
    • 您可以略過技術配置檔。

根據為指定的技術配置檔選擇的會話管理提供者,會話行為可以是作用中或隱藏的。 下列清單提供一些使用會話提供者的可能範例:

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

會話提供者

有五個會話提供者可用來管理技術配置檔如何處理 SSO 工作階段。 設定技術配置檔時,您必須選擇最適當的會話提供者。

下表根據您想要管理的技術配置檔類型,顯示要使用的會話提供者。 某些會話提供者允許讀取和寫入會話 Cookie 的宣告。

會話提供者 適用的技術配置檔類型 目的 寫入宣告 讀取宣告
DefaultSSOSessionProvider 自我判斷提示、 Microsoft Entra標識碼Microsoft Entra 多重要素驗證宣告轉換 略過技術配置檔執行。 Yes Yes
ExternalLoginSSOSessionProvider OAuth1 識別提供者Oauth2 識別提供者OpenID Connect 識別提供者SAML 識別提供者 加速識別提供者選取頁面。 執行單一註銷。 Yes Yes
OAuthSSOSessionProvider JWT 令牌簽發者 管理 OAuth2 或 OpenId Connect 信賴憑證者與 Azure AD B2C 之間的會話。 執行單一註銷。 No No
SamlSSOSessionProvider SAML 令牌簽發者 管理 SAML 信賴憑證者與 Azure AD B2C 之間的會話。 執行單一註銷。 No No
NoopSSOSessionProvider 任意 隱藏任何技術配置檔成為會話的一部分。 No No

下圖顯示 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. 參考技術配置檔內的會話管理技術配置檔。 如此一來,您可以在後續登入期間控制該技術配置文件的行為。

    若要從您的技術配置文件參考會話管理技術配置檔,請新增 UseTechnicalProfileForSessionManagement 元素。 下列範例顯示會話管理技術配置檔的使用 SM-AADReferenceId將變更為會話管理技術配置文件的標識碼。

    <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>

DefaultSSOSessionProvider ExternalLoginSSOSessionProvider 工作階段管理提供者可以設定為管理宣告,因此在:

  • 全新登入
    • 元素 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 的技術設定檔包含 OutputClaimsignInName。 此行為適用於所有符合此模式的宣告。
  • 後續登入
    • 會略過技術配置檔,且使用者不會看到登入頁面。
    • 宣告包會包含 signInName 會話 Cookie 中的值,此 Cookie 在全新登入時保存,以及符合要保存至會話 Cookie 模式的任何其他宣告。
    • 會話管理技術配置檔會 objectIdFromSession 傳回宣告,因為 Output 會話提供者的宣告會在後續登入期間處理(單一登錄)。 在此案例中, objectIdFromSession 宣告存在於宣告包中,表示由於單一登錄,使用者的宣告來自會話 Cookie。

ExternalLoginSSOSessionProvider

會話 ExternalLoginSSOSessionProvider 提供者可用來略過 [識別提供者選取] 畫面,並從同盟識別提供者註銷。 通常會在針對同盟識別提供者設定的技術配置文件中參考,例如 Facebook 或 Microsoft Entra ID。

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

下列 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 會保存,如此一來,在單一登錄旅程圖上,就可以從目錄讀取使用者的配置檔,而不需要與同盟識別提供者進行任何互動。

若要設定外部工作階段提供者,請從 OAuth1、OAuth2OpenID Connect 技術設定檔新增 對 SM-SocialLogin 的參考。 例如,使用Facebook-OAUTHSM-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-CommonSM-Noop會話管理技術配置檔。 如需詳細資訊,請參閱 自定義原則入門套件

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

下一步

瞭解如何設定 會話行為