分享方式:


RelyingParty

注意

在 Azure Active Directory B2C 中, 自定義原則 的設計主要是為了解決複雜的案例。 在大部分情況下,我們建議您使用內 建的使用者流程。 如果您尚未這麼做,請了解開始使用 Active Directory B2C 中的自定義原則入門套件。

RelyingParty 元素會指定要針對 Azure Active Directory B2C (Azure AD B2C) 目前的要求強制執行的使用者旅程圖。 它也會指定信賴憑證者 (RP) 應用程式需要用來作為所發出權杖一部分的宣告清單。 RP 應用程式,例如 Web、行動或傳統型應用程式,會呼叫 RP 原則檔案。 RP 原則檔案會執行特定工作,例如登入、重設密碼或編輯配置檔。 多個應用程式可以使用相同的 RP 原則,而單一應用程式可以使用多個原則。 所有 RP 應用程式都會使用宣告接收相同的令牌,且用戶會經歷相同的使用者旅程圖。

下列範例顯示B2C_1A_signup_signin原則檔案中的 RelyingParty 元素:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TrustFrameworkPolicy
  xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="https://www.w3.org/2001/XMLSchema"
  xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06"
  PolicySchemaVersion="0.3.0.0"
  TenantId="your-tenant.onmicrosoft.com"
  PolicyId="B2C_1A_signup_signin"
  PublicPolicyUri="http://your-tenant.onmicrosoft.com/B2C_1A_signup_signin">

  <BasePolicy>
    <TenantId>your-tenant.onmicrosoft.com</TenantId>
    <PolicyId>B2C_1A_TrustFrameworkExtensions</PolicyId>
  </BasePolicy>

  <RelyingParty>
    <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
    <UserJourneyBehaviors>
      <SingleSignOn Scope="Tenant" KeepAliveInDays="7"/>
      <SessionExpiryType>Rolling</SessionExpiryType>
      <SessionExpiryInSeconds>900</SessionExpiryInSeconds>
      <JourneyInsights TelemetryEngine="ApplicationInsights" InstrumentationKey="your-application-insights-key" DeveloperMode="true" ClientEnabled="false" ServerEnabled="true" TelemetryVersion="1.0.0" />
      <ContentDefinitionParameters>
        <Parameter Name="campaignId">{OAUTH-KV:campaignId}</Parameter>
      </ContentDefinitionParameters>
    </UserJourneyBehaviors>
    <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Description>The policy profile</Description>
      <Protocol Name="OpenIdConnect" />
      <Metadata>collection of key/value pairs of data</Metadata>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="displayName" />
        <OutputClaim ClaimTypeReferenceId="givenName" />
        <OutputClaim ClaimTypeReferenceId="surname" />
        <OutputClaim ClaimTypeReferenceId="email" />
        <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
        <OutputClaim ClaimTypeReferenceId="identityProvider" />
        <OutputClaim ClaimTypeReferenceId="loyaltyNumber" />
      </OutputClaims>
      <SubjectNamingInfo ClaimType="sub" />
    </TechnicalProfile>
  </RelyingParty>
  ...

選擇性 的 RelyingParty 元素包含下列元素:

元素 發生次數 描述
DefaultUserJourney 1:1 RP 應用程式的預設使用者旅程圖。
端點 0:1 端點清單。 如需詳細資訊,請參閱 UserInfo端點
UserJourneyBehaviors 0:1 使用者旅程圖行為的範圍。
TechnicalProfile 1:1 RP 應用程式所支援的技術配置檔。 技術配置檔提供 RP 應用程式的合約,以連絡 Azure AD B2C。

您必須依照上表中呈現的順序建立 RelyingParty 子元素。

端點

Endpoints 元素包含下列元素:

元素 發生次數 描述
端點 1:1 端點的參考。

Endpoint 元素包含下列屬性:

屬性 必要 描述
Id Yes 端點的唯一標識碼。
UserJourneyReferenceId Yes 原則中使用者旅程圖的標識碼。 如需詳細資訊,請參閱 使用者旅程圖

下列範例顯示具有 UserInfo 端點的信賴憑證者:

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <Endpoints>
    <Endpoint Id="UserInfo" UserJourneyReferenceId="UserInfoJourney" />
  </Endpoints>
  ...

DefaultUserJourney

元素 DefaultUserJourney 會指定基底或延伸模塊原則中定義之使用者旅程圖標識符的參考。 下列範例顯示 RelyingParty 元素中指定的註冊或登入使用者旅程圖:

B2C_1A_signup_signin原則:

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn">
  ...

B2C_1A_TrustFrameWorkBase或B2C_1A_TrustFrameworkExtensionPolicy

<UserJourneys>
  <UserJourney Id="SignUpOrSignIn">
  ...

DefaultUserJourney 元素包含下列屬性:

屬性 必要 描述
ReferenceId Yes 原則中使用者旅程圖的標識碼。 如需詳細資訊,請參閱 使用者旅程圖

UserJourneyBehaviors

UserJourneyBehaviors 元素包含下列元素:

元素 發生次數 描述
SingleSignOn 0:1 使用者旅程圖的單一登錄 (SSO) 工作階段行為範圍。
SessionExpiryType 0:1 會話的驗證行為。 可能的值: RollingAbsoluteRolling值 (預設值) 表示只要使用者持續在應用程式中處於作用中狀態,使用者就會保持登入狀態。 值 Absolute 表示使用者被迫在應用程式會話存留期指定的時間周期之後重新驗證。
SessionExpiryInSeconds 0:1 成功驗證時,Azure AD B2C 工作階段 Cookie 的存留期會指定為儲存在使用者瀏覽器上的整數。 默認值為86,400秒(24小時)。 最小值為 900 秒(15 分鐘)。 最大值為86,400秒(24小時)。
JourneyInsights 0:1 要使用的 Azure 應用程式 Insights 檢測金鑰。
ContentDefinitionParameters 0:1 要附加至內容定義載入 URI 的索引鍵值組清單。
JourneyFraming 0:1 允許將此原則的使用者介面載入 iframe 中。
ScriptExecution 0:1 支援的 JavaScript 執行模式。 可能的值: AllowDisallow (預設值)。

當您使用上述元素時,您需要以數據表中指定的順序,將它們新增至 UserJourneyBehaviors 元素。 例如,在 ScriptExecution 元素之前,必須先新增 JourneyInsights 元素。

SingleSignOn

SingleSignOn 元素包含下列屬性:

屬性 必要 描述
範圍 Yes 單一登錄行為的範圍。 可能的值: SuppressedTenantApplicationPolicy。 值 Suppressed 表示隱藏行為,且一律會提示用戶選取識別提供者。 值 Tenant 表示行為會套用至租使用者中的所有原則。 例如,系統不會提示用戶流覽租使用者的兩個原則旅程圖,以選取身分識別提供者。 值 Application 表示行為會套用至發出要求之應用程式的所有原則。 例如,系統不會提示使用者瀏覽應用程式的兩個原則旅程圖,以選取識別提供者。 值 Policy 表示行為只適用於原則。 例如,在原則之間切換時,系統會提示用戶流覽信任架構的兩個原則旅程圖,以選取身分識別提供者。
KeepAliveInDays No 控制使用者保持登入的時間長度。 將值設定為 0 會關閉 KMSI 功能。 預設值為 0 [已停用]。 最小值為 1 day。 最大值為 90 天。 如需詳細資訊,請參閱 讓我保持登入
EnforceIdTokenHintOnLogout No 強制將先前發出的標識元令牌傳遞至註銷端點,以提示使用者目前與客戶端驗證的會話。 可能的值: false (預設值),或 true。 如需詳細資訊,請參閱 使用 OpenID Connect 的 Web 登入。

JourneyInsights

JourneyInsights 元素包含下列屬性:

屬性 必要 描述
TelemetryEngine Yes 值必須是 ApplicationInsights
InstrumentationKey Yes 包含 application insights 元素檢測金鑰的字串。
DeveloperMode Yes 可能的值: truefalse。 如果 true為 ,Application Insights 會透過處理管線加速遙測。 此設定適用於開發,但受限於大量。 詳細的活動記錄只設計來協助開發自定義原則。 請勿在生產環境中使用開發模式。 記錄會在開發期間收集從識別提供者傳送至和傳出的所有宣告。 如果在生產環境中使用,開發人員會負責在App Insights記錄檔中收集的個人資料。 只有在此值設定為 true時,才會收集這些詳細記錄。
ClientEnabled Yes 可能的值: truefalse。 如果 true為,則會傳送 Application Insights 用戶端腳本來追蹤頁面檢視和客戶端錯誤。
ServerEnabled Yes 可能的值: truefalse。 如果 true為 ,請將現有的UserJourneyRecorder JSON 當做自定義事件傳送至Application Insights。
TelemetryVersion Yes 值必須是 1.0.0

如需詳細資訊,請參閱 收集記錄

ContentDefinitionParameters

藉由在 Azure AD B2C 中使用自定義原則,您可以在查詢字串中傳送參數。 藉由將 參數傳遞至 HTML 端點,您可以動態變更頁面內容。 例如,您可以根據您從 Web 或行動應用程式傳遞的參數,變更 Azure AD B2C 註冊或登入頁面上的背景影像。 Azure AD B2C 會將查詢字串參數傳遞至動態 HTML 檔案,例如 aspx 檔案。

下列範例會在查詢字串中傳遞名為 campaignId 的參數,其值為 hawaii

https://login.microsoft.com/contoso.onmicrosoft.com/oauth2/v2.0/authorize?pB2C_1A_signup_signin&client_id=a415078a-0402-4ce3-a9c6-ec1947fcfb3f&nonce=defaultNonce&redirect_uri=http%3A%2F%2Fjwt.io%2F&scope=openid&response_type=id_token&prompt=login&campaignId=hawaii

ContentDefinitionParameters 元素包含下列元素:

元素 發生次數 描述
ContentDefinitionParameter 0:n 字串,包含附加至內容定義載入 URI 之查詢字串的索引鍵值組。

ContentDefinitionParameter 元素包含下列屬性:

屬性 必要 描述
姓名 Yes 索引鍵值組的名稱。

如需詳細資訊,請參閱 使用自定義原則設定UI與動態內容

JourneyFraming

JourneyFraming 元素包含下列屬性:

屬性 必要 描述
啟用 Yes 可讓此原則在 iframe 內載入。 可能的值: false (預設值),或 true
來源 Yes 包含將載入裝載 iframe 的網域。 如需詳細資訊,請參閱 在 iframe 中載入 Azure B2C。

TechnicalProfile

TechnicalProfile 元素包含下列屬性:

屬性 必要 描述
Id Yes 值必須是 PolicyProfile

TechnicalProfile 包含下列元素:

元素 發生次數 描述
DisplayName 1:1 包含技術配置檔名稱的字串。
描述 0:1 包含技術配置檔描述的字串。
通訊協定 1:1 用於同盟的通訊協定。
中繼資料 0:1 通訊協定用來在交易過程中與端點通訊的索引鍵/值組專案集合,以設定信賴憑證者與其他社群參與者之間的互動。
InputClaims 1:1 作為技術配置檔中輸入的宣告類型清單。 每個元素都包含 ClaimsSchema 區段中已定義之 ClaimType 的參考,或是這個原則檔案繼承的來源原則中。
OutputClaims 1:1 作為技術配置檔中輸出的宣告類型清單。 每個元素都包含 ClaimsSchema 區段中已定義之 ClaimType 的參考,或是這個原則檔案繼承的來源原則中。
SubjectNamingInfo 1:1 令牌中使用的主體名稱。

Protocol 元素包含下列屬性:

屬性 必要 描述
姓名 Yes 作為技術配置檔一部分的 Azure AD B2C 所支援的有效通訊協定名稱。 可能的值: OpenIdConnectSAML2。 值 OpenIdConnect 代表根據 OpenID 基礎規格的 OpenID Connect 1.0 通訊協議標準。 SAML2表示根據 OASIS 規格的 SAML 2.0 通訊協議標準。

中繼資料

當通訊協定為 SAML時,元數據元素會包含下列元素。 如需詳細資訊,請參閱 在 Azure AD B2C 中註冊 SAML 應用程式的選項。

屬性 必要 描述
IdpInitiatedProfileEnabled No 指出是否支援IDP起始的流程。 可能的值: truefalse (預設值)。
XmlSignatureAlgorithm No Azure AD B2C 用來簽署 SAML 回應的方法。 可能的值: Sha256Sha384Sha512Sha1。 請確定您在兩端都使用相同的值來設定簽章演算法。 只使用憑證支持的演算法。 若要設定 SAML 判斷提示,請參閱 SAML 簽發者技術配置檔元數據
DataEncryptionMethod No 指出 Azure AD B2C 使用進階加密標準 (AES) 演演算法來加密數據的方法。 元數據會控制 SAML 回應中的專案值 <EncryptedData> 。 可能的值: Aes256 (預設值)、 Aes192、、 Sha512 Aes128
KeyEncryptionMethod No 指出 Azure AD B2C 用來加密數據之金鑰複本的方法。 元數據會控制 SAML 回應中的專案值 <EncryptedKey> 。 可能的值: Rsa15 (預設值) - RSA 公鑰密碼編譯標準 (PKCS) 1.5 版演算法 - RsaOaep RSA 最佳非對稱加密填補 (OAEP) 加密演算法。
UseDetachedKeys No 可能的值: true、 或 false (預設值)。 當值設定為 true時,Azure AD B2C 會變更加密判斷提示的格式。 使用中斷連結的金鑰會將加密判斷提示新增為 EncrytedAssertion 的子系,而不是 EncryptedData。
WantsSignedResponses No 指出 Azure AD B2C 是否會簽署 Response SAML 回應的 區段。 可能的值: true (預設值)或 false
RemoveMillisecondsFromDateTime No 指出是否要從 SAML 回應內的 datetime 值中移除毫秒(這些值包括 IssueInstant、NotBefore、NotOnOrAfter 和 AuthnInstant)。 可能的值: false (預設值)或 true
RequestContextMaximumLengthInBytes No 指出 SAML 應用程式RelayState參數的最大長度。 預設值為 1000。 最大值為 2048。

InputClaims

InputClaims 元素包含下列元素:

元素 發生次數 描述
InputClaim 0:n 預期的輸入宣告類型。

InputClaim 元素包含下列屬性:

屬性 必要 描述
ClaimTypeReferenceId Yes 已在原則檔的 ClaimsSchema 區段中定義的 ClaimType 參考
DefaultValue No 如果宣告值是空的,可以使用的預設值。
PartnerClaimType No 以不同的名稱傳送宣告,如 ClaimType 定義中所設定。

OutputClaims

OutputClaims 元素包含下列元素:

元素 發生次數 描述
OutputClaim 0:n 信賴憑證者所訂閱原則之支援清單中預期的宣告類型名稱。 此宣告可作為技術配置文件的輸出。

OutputClaim 元素包含下列屬性:

屬性 必要 描述
ClaimTypeReferenceId Yes 已在原則檔的 ClaimsSchema 區段中定義的 ClaimType 參考
DefaultValue No 如果宣告值是空的,可以使用的預設值。
PartnerClaimType No 以不同的名稱傳送宣告,如 ClaimType 定義中所設定。

SubjectNamingInfo

使用 SubjectNamingInfo 元素,您可以控制令牌主體的值:

  • JWT 令牌 - sub 宣告。 這是令牌判斷提示信息的主體,例如應用程式的使用者。 這個值不可變,而且無法重新指派或重複使用。 它可以用來執行安全授權檢查,例如當令牌用來存取資源時。 根據預設,主體宣告會填入目錄中用戶的物件標識符。 如需詳細資訊,請參閱 令牌、會話和單一登錄設定
  • SAML 令牌 - <Subject><NameID> 專案,可識別主體元素。 NameId 格式可以修改。

SubjectNamingInfo 元素包含下列屬性:

屬性 必要 描述
ClaimType Yes 輸出宣告 PartnerClaimType參考。 輸出宣告必須在具有 PartnerClaimType 的信賴憑證者原則 OutputClaims 集合中定義。 例如,<OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" /><OutputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="signInName" />
格式 No 用於 SAML 信賴憑證者,以設定 SAML 判斷提示中傳回的 NameId 格式

下列範例示範如何定義 OpenID Connect 信賴憑證者。 主體名稱資訊已設定為 objectId

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="OpenIdConnect" />
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="displayName" />
      <OutputClaim ClaimTypeReferenceId="givenName" />
      <OutputClaim ClaimTypeReferenceId="surname" />
      <OutputClaim ClaimTypeReferenceId="email" />
      <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
      <OutputClaim ClaimTypeReferenceId="identityProvider" />
    </OutputClaims>
    <SubjectNamingInfo ClaimType="sub" />
  </TechnicalProfile>
</RelyingParty>

JWT 令牌包含 sub 具有 user objectId 的宣告:

{
  ...
  "sub": "6fbbd70d-262b-4b50-804c-257ae1706ef2",
  ...
}

下列範例示範如何定義 SAML 信賴憑證者。 主體名稱資訊已設定為 objectId,且已提供 NameId format

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="SAML2" />
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="displayName" />
      <OutputClaim ClaimTypeReferenceId="givenName" />
      <OutputClaim ClaimTypeReferenceId="surname" />
      <OutputClaim ClaimTypeReferenceId="email" />
      <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
      <OutputClaim ClaimTypeReferenceId="identityProvider" />
    </OutputClaims>
    <SubjectNamingInfo ClaimType="sub" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>
  </TechnicalProfile>
</RelyingParty>