使用 Azure Active Directory B2C 自訂原則在使用者旅程圖中建立分支
相同應用程式的不同使用者可以遵循不同的使用者旅程,視自訂原則中的資料值而定。 Azure Active Directory B2C (Azure AD B2C) 自訂原則可讓您有條件地啟用或停用技術設定檔,以達成這項功能。 例如,在使用 Azure AD B2C 自訂原則 驗證使用者輸入中 ,我們使用 來 Precondition
判斷是否應該根據 accountType 宣告的值 執行驗證技術設定檔。
技術設定檔也提供 EnabledForUserJourneys
元素,讓您指定是否應該執行技術設定檔。 元素 EnabledForUserJourneys
包含五個值之一,包括 OnClaimsExistence ,您用來指定只有在技術設定檔中指定的特定宣告存在時,才應該執行技術設定檔。 深入瞭解技術設定檔的 EnabledForUserJourneys 元素。
案例概觀
在 使用 Azure AD B2C 自訂原則 驗證使用者輸入一文中,使用者會在單一畫面中輸入其詳細資料。 在本文中,使用者必須先選取其帳戶類型 Contoso Employee Account 或 Personal Account 。 選取 Contoso 員工帳戶 的使用者可以繼續提供進一步的詳細資料。 不過,選取 個人帳戶 的使用者必須先提供有效的邀請存取代碼,才能繼續提供進一步的詳細資料。 因此,使用 個人帳戶 帳戶類型的使用者會看到額外的使用者介面來完成其旅程。
在本文中,您將瞭解如何使用 EnabledForUserJourneys
技術設定檔內的 元素,根據宣告值建立不同的使用者體驗。
必要條件
如果您還沒有 Azure AD B2C 租使用者, 請建立連結至 Azure 訂用帳戶的 Azure AD B2C 租 使用者。
註冊 Web 應用程式 ,並 啟用識別碼權杖隱含授與 。 針對 [重新導向 URI],請使用 https://jwt.ms 。
您的電腦中必須 安裝 Visual Studio Code (VS Code)。
完成使用 Azure AD B2C 自訂原則 驗證使用者輸入中的 步驟。 本文是建立及執行您自己的自訂原則操作指南系列的 一部分 。
注意
本文是 Azure Active Directory B2C 操作指南系列 中建立和執行您自己的自訂原則的一部分 。 建議您從第一篇文章開始此系列。
步驟 1 - 宣告宣告
選取 個人帳戶 的使用者必須提供有效的存取代碼。 因此,我們需要宣告來保存此值:
在 VS Code 中,開啟
ContosoCustomPolicy.XML
檔案。在 區
ClaimsSchema
段中,使用下列程式碼宣告 accessCode 和 isValidAccessCode 宣告:<ClaimType Id="accessCode"> <DisplayName>Access Code</DisplayName> <DataType>string</DataType> <UserHelpText>Enter your invitation access code.</UserHelpText> <UserInputType>Password</UserInputType> <Restriction> <Pattern RegularExpression="[0-9][0-9][0-9][0-9][0-9]" HelpText="Please enter your invitation access code. It's a 5-digit number, something like 95765"/> </Restriction> </ClaimType> <ClaimType Id="isValidAccessCode"> <DataType>boolean</DataType> </ClaimType>
步驟 2 - 定義宣告轉換
ClaimsTransformations
找出 元素,並新增下列宣告轉換:
<!---<ClaimsTransformations>-->
<ClaimsTransformation Id="CheckIfIsValidAccessCode" TransformationMethod="CompareClaimToValue">
<InputClaims>
<InputClaim ClaimTypeReferenceId="accessCode" TransformationClaimType="inputClaim1"/>
</InputClaims>
<InputParameters>
<InputParameter Id="compareTo" DataType="string" Value="88888"/>
<InputParameter Id="operator" DataType="string" Value="equal"/>
<InputParameter Id="ignoreCase" DataType="string" Value="true"/>
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="isValidAccessCode" TransformationClaimType="outputClaim"/>
</OutputClaims>
</ClaimsTransformation>
<ClaimsTransformation Id="ThrowIfIsNotValidAccessCode" TransformationMethod="AssertBooleanClaimIsEqualToValue">
<InputClaims>
<InputClaim ClaimTypeReferenceId="isValidAccessCode" TransformationClaimType="inputClaim"/>
</InputClaims>
<InputParameters>
<InputParameter Id="valueToCompareTo" DataType="boolean" Value="true"/>
</InputParameters>
</ClaimsTransformation>
<!---</ClaimsTransformations>-->
我們已定義兩個宣告轉換: CheckIfIsValidAccessCode 和 ThrowIfIsNotValidAccessCode 。 CheckIfIsValidAccessCode 會使用 CompareClaimToValue 轉換方法來比較使用者對靜態值 88888 的存取碼輸入(讓我們使用此值進行測試),並將 或 指派 true
給 false
isValidAccessCode 宣告。 ThrowIfIsNotValidAccessCode 會檢查兩個宣告的兩個布林值是否相等,如果兩個宣告不相等,則會擲回例外狀況。
步驟 3 - 設定或更新技術設定檔
您現在需要兩個新的自我判斷技術設定檔,一個用來收集帳戶類型,另一個則從使用者收集存取碼。 您也需要新的宣告轉換類型技術設定檔,藉由執行您在步驟 2 中 定義的宣告轉換來驗證使用者的存取碼。 既然我們要在不同的自我判斷技術設定檔中收集帳戶類型,我們需要更新 UserInformationCollector
自我判斷技術設定檔,以防止它收集帳戶類型。
ClaimsProviders
找出 元素,然後使用下列程式碼新增宣告提供者:<!--<ClaimsProviders>--> <ClaimsProvider> <DisplayName>Technical Profiles to collect user's access code</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="AccessCodeInputCollector"> <DisplayName>Collect Access Code Input from user Technical Profile</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> <Metadata> <Item Key="ContentDefinitionReferenceId">SelfAssertedContentDefinition</Item> <Item Key="UserMessageIfClaimsTransformationBooleanValueIsNotEqual">The access code is invalid.</Item> <Item Key="ClaimTypeOnWhichToEnable">accountType</Item> <Item Key="ClaimValueOnWhichToEnable">personal</Item> </Metadata> <DisplayClaims> <DisplayClaim ClaimTypeReferenceId="accessCode" Required="true"/> </DisplayClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="accessCode"/> </OutputClaims> <ValidationTechnicalProfiles> <ValidationTechnicalProfile ReferenceId="CheckAccessCodeViaClaimsTransformationChecker"/> </ValidationTechnicalProfiles> <EnabledForUserJourneys>OnClaimsExistence</EnabledForUserJourneys> </TechnicalProfile> <TechnicalProfile Id="CheckAccessCodeViaClaimsTransformationChecker"> <DisplayName>A Claims Transformations to check user's access code validity</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> <OutputClaims> <OutputClaim ClaimTypeReferenceId="isValidAccessCode"/> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="CheckIfIsValidAccessCode"/> <OutputClaimsTransformation ReferenceId="ThrowIfIsNotValidAccessCode"/> </OutputClaimsTransformations> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider> <!--</ClaimsProviders>-->
我們已設定兩個技術設定檔 :AccessCodeInputCollector 和 CheckAccessCodeViaClaimsTransformationChecker 。 我們將 CheckAccessCodeViaClaimsTransformationChecker 技術設定檔稱為 AccessCodeInputCollector 技術設定檔內的 驗證技術設定檔。 CheckAccessCodeViaClaimsTransformationChecker 本身的類型為 Claims Transformation 技術設定檔,它會執行我們在步驟 2 中 定義的宣告轉換。
AccessCodeInputCollector 是自我判斷技術設定檔,用來從使用者收集存取碼。 它包含
EnabledForUserJourneys
設定為 OnClaimsExistence 的專案 。 其Metadata
元素包含宣告 ( accountType ) 及其啟用此技術設定檔的值 ( personal )。ClaimsProviders
找出 元素,然後使用下列程式碼新增宣告提供者:<!--<ClaimsProviders>--> <ClaimsProvider> <DisplayName>Technical Profile to collect user's accountType</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="AccountTypeInputCollector"> <DisplayName>Collect User Input Technical Profile</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> <Metadata> <Item Key="ContentDefinitionReferenceId">SelfAssertedContentDefinition</Item> </Metadata> <DisplayClaims> <DisplayClaim ClaimTypeReferenceId="accountType" Required="true"/> </DisplayClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="accountType"/> </OutputClaims> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider> <!--</ClaimsProviders>-->
我們已設定自我判斷技術設定檔,
AccountTypeInputCollector
其會收集使用者的帳戶類型。 這是帳戶類型的值,可判斷是否AccessCodeInputCollector
應該啟用自我判斷技術設定檔。若要防止
UserInformationCollector
自我判斷技術設定檔收集帳戶類型,請找出UserInformationCollector
自我判斷技術設定檔,然後:accountType
從DisplayClaims
集合中移除顯示宣告<DisplayClaim ClaimTypeReferenceId="accountType" Required="true"/>
。accountType
從OutputClaims
集合中移除輸出宣告<OutputClaim ClaimTypeReferenceId="accountType"/>
。
步驟 4 - 更新使用者旅程圖協調流程步驟
現在您已設定技術設定檔,您需要更新使用者旅程圖協調流程步驟:
找出您的
HelloWorldJourney
使用者旅程圖,並將所有協調流程步驟取代為下列程式碼:<!--<OrchestrationSteps>--> <OrchestrationStep Order="1" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="AccountTypeInputCollectorClaimsExchange" TechnicalProfileReferenceId="AccountTypeInputCollector"/> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="2" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="GetAccessCodeClaimsExchange" TechnicalProfileReferenceId="AccessCodeInputCollector" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="3" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="GetUserInformationClaimsExchange" TechnicalProfileReferenceId="UserInformationCollector"/> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="4" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="GetMessageClaimsExchange" TechnicalProfileReferenceId="ClaimGenerator"/> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="5" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer"/> <!--</OrchestrationSteps>-->
協調流程步驟顯示,我們會依照協調流程步驟屬性
Order
所顯示的順序呼叫技術設定檔。 不過,AccessCodeInputCollector
如果使用者選取 [個人帳戶] 帳戶 類型,則會啟用技術設定檔。
步驟 5 - 上傳自訂原則檔案
請遵循上傳自訂原則檔案 中的 步驟來上傳您的原則檔案。 如果您要上傳與入口網站中已有相同名稱的檔案,請確定您已選取 [覆寫自訂原則] ,如果檔案已經存在 。
步驟 6 - 測試自訂原則
請遵循測試自訂原則 中的步驟 來測試您的自訂原則:
- 在第一個畫面中,針對 [ 帳戶類型 ],選取 [ 個人帳戶 ]。
- 針對 [ 存取碼 ],輸入 88888 ,然後選取 [ 繼續 ]。
- 視需要輸入其餘的詳細資料,然後選取 [ 繼續 ]。 原則完成執行之後,系統會將您重新導向至
https://jwt.ms
,您會看到已解碼的 JWT 權杖。 - 重複步驟 5,但這次,請選取 [帳戶類型 ]、選取 [Contoso 員工帳戶 ],然後遵循提示。
下一步
在 步驟 3 中,我們會使用 EnabledForUserJourneys
元素來啟用或停用技術設定檔。 或者,您可以在使用者旅程流程步驟內使用 前置條件 來執行或略過協調流程步驟,如我們稍後在此系列中瞭解。
接下來,瞭解: