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 元素包含下列元素:

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

您必須依照上表中顯示的順序建立 RelyingParty 子項目。

端點

Endpoints 元素包含下列元素:

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

Endpoint 元素包含下列屬性:

屬性 必要 Description
識別碼 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_TrustFrameWorkBaseB2C_1A_TrustFrameworkExtensionPolicy

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

DefaultUserJourney 元素包含下列屬性:

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

UserJourneyBehaviors

UserJourneyBehaviors 元素包含下列元素:

元素 發生次數 Description
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 Application Insights 檢測金鑰。
ContentDefinitionParameters 0:1 要附加至內容定義負載 URI 的金鑰值組清單。
JourneyFraming 0:1 允許在 iframe 中載入此原則的使用者介面。
ScriptExecution 0:1 支援的 JavaScript 執行模式。 可能的值為:AllowDisallow (預設)。

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

SingleSignOn

SingleSignOn 元素包含下列屬性:

屬性 必要 Description
範圍 Yes 單一登入行為的範圍。 可能的值:SuppressedTenantApplicationPolicySuppressed 值表示隱藏行為,且一律會提示使用者輸入識別提供者選取項目。 Tenant 值表示會將行為套用到租用戶中的所有原則。 例如,如果使用者瀏覽租用戶的兩個原則旅程圖,系統不會提示該使用者選取識別提供者。 Application 值表示會將行為套用到適用於提出要求之應用程式的所有原則。 例如,如果使用者瀏覽應用程式的兩個原則旅程圖,系統不會提示該使用者選取識別提供者。 Policy 值表示只會將行為套用到某個原則。 例如,如果使用者瀏覽信任架構的兩個原則旅程圖,系統會在該使用者於原則之間進行切換時提示其選取識別提供者。
KeepAliveInDays No 會控制使用者保持登入的時間長度。 將值設為 0 會關閉 KMSI 功能。 預設值為 0 (停用)。 最小值為 1 天。 最大值為 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,則傳送 ApplicationInsights 用戶端指令碼來追蹤頁面檢視和用戶端錯誤。
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 元素包含下列元素:

元素 發生次數 Description
ContentDefinitionParameter 0:n 字串,其中包含附加至內容定義負載 URI 查詢字串的金鑰值組。

ContentDefinitionParameter 元素包含下列屬性:

屬性 必要 Description
Name Yes 金鑰值組的名稱。

如需詳細資訊,請參閱使用自訂原則設定具有動態內容的 UI

JourneyFraming

JourneyFraming 元素包含下列屬性:

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

TechnicalProfile

TechnicalProfile 元素包含下列屬性:

屬性 必要 Description
識別碼 Yes 值必須是 PolicyProfile

TechnicalProfile 包含下列元素:

元素 發生次數 描述
DisplayName 1:1 包含技術設定檔名稱的字串。
Description 0:1 包含技術設定檔描述的字串。
通訊協定 1:1 用於同盟的通訊協定。
中繼資料 0:1 金鑰/值組的 Item 集合,通訊協定會在交易過程中利用它來與端點進行通訊,以設定信賴憑證者與其他社群參與者之間的互動。
InputClaims 1:1 宣告類型清單,可取得來做為技術設定檔中的輸入。 這些元素中的每一個均會參考已經定義於 ClaimsSchema 區段中或此原則檔所繼承之原則中的 ClaimType
OutputClaims 1:1 宣告類型清單,可取得來作為技術設定檔中的輸出。 這些元素中的每一個均會參考已經定義於 ClaimsSchema 區段中或此原則檔所繼承之原則中的 ClaimType
SubjectNamingInfo 1:1 權杖中所使用的主體名稱。

Protocol 元素包含下列屬性:

屬性 必要 Description
Name Yes Azure AD B2C 所支援的有效通訊協定名稱,可用來作為技術設定檔的一部分。 可能的值:OpenIdConnectSAML2OpenIdConnect 值代表以每個 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 使用進階加密標準 (AES) 演算法,指出 Azure AD B2C 用來加密資料的方法。 中繼資料會控制 SAML 回應中的 <EncryptedData> 元素值。 可能的值:Aes256 (預設)、Aes192Sha512 Aes128
KeyEncryptionMethod No 指出 Azure AD B2C 用來加密金鑰複本 (用來加密資料) 的方法。 中繼資料會控制 SAML 回應中的 <EncryptedKey> 元素值。 可能的值: Rsa15 (預設) - RSA 公開金鑰加密標準 (PKCS) 1.5 版演算法、 RsaOaep - RSA 最佳非對稱式加密填補 (OAEP) 加密演算法。
UseDetachedKeys No 可能的值為:truefalse (預設)。 當值設定為 true 時,Azure AD B2C 會變更加密判斷提示的格式。 使用中斷連結的金鑰會將加密的判斷提示新增為 EncrytedAssertion 的子系,而不是 EncryptedData。
WantsSignedResponses No 指出 Azure AD B2C 是否簽署 SAML 回應的 Response 區段。 可能的值:true (預設) 或 false
RemoveMillisecondsFromDateTime No 指出是否會從 SAML 回應內的日期時間值移除毫秒 (這些值包括 IssueInstant、NotBefore、NotOnOrAfter 和 AuthnInstant)。 可能的值:false (預設) 或 true
RequestContextMaximumLengthInBytes No 指出 SAML 應用程式RelayState參數的最大長度。 預設值是 1000。 最大值為 2048。

InputClaims

InputClaims 元素包含下列元素:

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

InputClaim 元素包含下列屬性:

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

OutputClaims

OutputClaims 元素包含下列元素:

元素 發生次數 Description
OutputClaim 0:n 信賴憑證者所訂閱之原則支援清單中預期的宣告類型名稱。 此宣告會用來做為技術設定檔的輸出。

OutputClaim 元素包含下列屬性:

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

SubjectNamingInfo

使用 SubjectNameingInfo 元素,您可以控制權杖主體的值:

  • JWT 權杖sub 宣告。 這是權杖判斷資訊時所針對的主體,例如應用程式的使用者。 這個值不可變,而且無法重新指派或重複使用。 它可用來執行安全的授權檢查,例如,將權杖用於存取資源時。 根據預設,主體宣告會填入目錄中使用者的物件識別碼。 如需詳細資訊,請參閱權杖、工作階段及單一登入設定
  • SAML 權杖:可識別主體元素的 <Subject><NameID> 元素。 NameId 格式可以修改。

SubjectNamingInfo 元素包含下列屬性:

屬性 必要 描述
ClaimType Yes 對輸出宣告之 PartnerClaimType 的參考。 輸出宣告必須定義於信賴憑證者原則 OutputClaims 集合中,具有 PartnerClaimType。 例如,<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 權杖包含具使用者 objectId 的 sub 宣告:

{
  ...
  "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>