在 Azure Active Directory B2C 自定義原則中定義驗證技術配置檔

注意

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

驗證技術配置檔是來自任何通訊協定的一般技術配置檔,例如 Microsoft Entra IDREST API。 驗證技術配置檔會傳回輸出宣告,或傳回具有下列數據的 4xx HTTP 狀態代碼。 如需詳細資訊,請參閱 傳回錯誤訊息

{
    "version": "1.0.0",
    "status": 409,
    "userMessage": "Your error message"
}

驗證技術配置文件的輸出宣告範圍僅限於 叫用驗證技術配置檔及其驗證技術配置檔的自我判斷技術配置檔 。 如果您想要在下一個協調流程步驟中使用輸出宣告,請將輸出宣告新增至叫用驗證技術配置檔的自我判斷技術配置檔。

驗證技術配置檔會依出現在 ValidationTechnicalProfiles 元素中的順序執行。 您可以在驗證技術配置檔中設定,如果驗證技術配置文件引發錯誤或成功,是否應該繼續執行任何後續驗證技術配置檔。

您可以根據 ValidationTechnicalProfile 元素中定義的前置條件,有條件地執行驗證技術配置檔。 例如,您可以檢查特定宣告是否存在,或宣告是否等於指定的值。

自我判斷技術配置檔可能會定義驗證技術配置檔,以用來驗證部分或所有輸出宣告。 參考技術配置檔的所有輸入宣告都必須出現在參考驗證技術配置文件的輸出宣告中。

注意

只有自我判斷技術配置檔可以使用驗證技術配置檔。 如果您需要驗證非自我判斷技術配置文件的輸出宣告,請考慮在使用者旅程圖中使用額外的協調流程步驟,以配合負責驗證的技術配置檔。

ValidationTechnicalProfiles

ValidationTechnicalProfiles 元素包含下列元素:

Element 發生次數 描述
ValidationTechnicalProfile 1:n 用來驗證參考技術配置檔之部分或所有輸出宣告的技術配置檔。

ValidationTechnicalProfile 元素包含下列屬性:

屬性 必要 描述
ReferenceId Yes 已在原則或父原則中定義之技術配置檔的標識碼。
ContinueOnError No 指出如果此驗證技術配置檔引發錯誤,則是否應該繼續驗證任何後續驗證技術配置檔。 可能的值: truefalse (預設值,進一步驗證配置檔的處理將會停止,並傳回錯誤)。
ContinueOnSuccess No 指出如果此驗證技術配置檔成功,是否應該繼續驗證任何後續驗證配置檔。 可能的值: truefalse。 預設值為 true,表示進一步驗證配置檔的處理將會繼續。

注意

目前,如果您針對 ClaimsTransformation 類型的驗證技術配置檔將 ContinueOnError 設定為 false,技術配置檔就不會接受設定。 若要克服此問題,請改用前置條件。

ValidationTechnicalProfile 元素包含下列元素:

Element 發生次數 描述
前置條件 0:1 必須滿足驗證技術配置檔才能執行的先決條件清單。

Precondition 元素包含下列屬性:

屬性 必要 描述:
Type Yes 要針對前置條件執行的檢查或查詢類型。 ClaimsExist如果指定的宣告存在於使用者目前的宣告集中,或指定如果指定的宣告存在且其值等於指定的值,ClaimEquals則應該執行動作,以確保應該執行動作。
ExecuteActionsIf Yes 指出測試為 true 或 false 時,是否應該執行前置條件中的動作。

前置條件元素包含下列元素:

Element 發生次數 描述
1:n 檢查所使用的數據。 如果此檢查的類型為 ClaimsExist,此字段會指定要查詢的 ClaimTypeReferenceId。 如果檢查的類型為 ClaimEquals,此字段會指定要查詢的 ClaimTypeReferenceId。 另一個 value 元素則包含要檢查的值。
動作 1:1 如果協調流程步驟內的前置條件檢查為 true,則應該採取的動作。 Action 的值會設定為 SkipThisValidationTechnicalProfile。 指定不應該執行相關聯的驗證技術配置檔。

範例

下列範例會使用這些驗證技術配置檔:

  1. 第一個驗證技術配置檔會檢查用戶認證,如果發生錯誤,則不會繼續,例如無效的用戶名稱或不正確的密碼。
  2. 下一個驗證技術配置檔,如果userType宣告不存在,或userType的值是 Partner,則不會執行 。 驗證技術配置檔會嘗試從內部客戶資料庫讀取使用者配置檔,並在發生錯誤時繼續,例如 REST API 服務無法使用,或任何內部錯誤。
  3. 如果userType宣告不存在,或userType的值是 Customer,則不會執行最後一個驗證技術配置檔。 驗證技術配置檔會嘗試從內部夥伴資料庫讀取使用者配置檔,並在發生錯誤時繼續,例如 REST API 服務無法使用,或任何內部錯誤。
<ValidationTechnicalProfiles>
  <ValidationTechnicalProfile ReferenceId="login-NonInteractive" ContinueOnError="false" />
  <ValidationTechnicalProfile ReferenceId="REST-ReadProfileFromCustomersDatabase" ContinueOnError="true" >
    <Preconditions>
      <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
        <Value>userType</Value>
        <Action>SkipThisValidationTechnicalProfile</Action>
      </Precondition>
      <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
        <Value>userType</Value>
        <Value>Partner</Value>
        <Action>SkipThisValidationTechnicalProfile</Action>
      </Precondition>
    </Preconditions>
  </ValidationTechnicalProfile>
  <ValidationTechnicalProfile ReferenceId="REST-ReadProfileFromPartnersDatabase" ContinueOnError="true" >
    <Preconditions>
      <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
        <Value>userType</Value>
        <Action>SkipThisValidationTechnicalProfile</Action>
      </Precondition>
      <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
        <Value>userType</Value>
        <Value>Customer</Value>
        <Action>SkipThisValidationTechnicalProfile</Action>
      </Precondition>
    </Preconditions>
  </ValidationTechnicalProfile>
</ValidationTechnicalProfiles>