Sdílet prostřednictvím


Vytvoření větvení na cestě uživatele pomocí vlastních zásad Azure Active Directory B2C

Různí uživatelé stejné aplikace můžou sledovat různé cesty uživatelů v závislosti na hodnotách dat ve vlastních zásadách. Vlastní zásady Azure Active Directory B2C (Azure AD B2C) umožňují podmíněně povolit nebo zakázat technický profil, abyste tuto funkci dosáhli. Například při ověřování uživatelských vstupů pomocí vlastních zásad Azure AD B2C jsme použili Precondition k určení, jestli bychom měli spustit technický profil ověření na základě hodnoty deklarace identity accountType .

Technický profil také poskytuje EnabledForUserJourneys prvek, který vám umožní určit, jestli se má technický profil spustit nebo ne. Prvek EnabledForUserJourneys obsahuje jednu z pěti hodnot včetně OnClaimsExistence, které slouží k určení, že technický profil by měl běžet pouze v případě, že existuje určitá deklarace identity zadaná v technickém profilu. Přečtěte si další informace o elementu EnabledForUserJourneys technického profilu.

Přehled scénáře

V článku o ověření uživatelských vstupů pomocí vlastní zásady Azure AD B2C uživatel zadá podrobnosti na jedné obrazovce. V tomto článku musí uživatel nejprve vybrat typ svého účtu, účet zaměstnance contoso nebo osobní účet. Uživatel, který vybere účet zaměstnance Contoso, může pokračovat a zadat další podrobnosti. Uživatel, který vybere osobní účet , ale musí zadat platný přístupový kód pozvánky, aby mohl pokračovat v poskytování dalších podrobností. Proto uživatelé, kteří používají typ účtu osobního účtu , uvidí další uživatelské rozhraní pro dokončení své cesty.

A flowchart of branching in user journey.

V tomto článku se dozvíte, jak pomocí EnabledForUserJourneys elementu uvnitř technického profilu vytvořit různá uživatelská prostředí na základě hodnoty deklarace identity.

Předpoklady

Poznámka:

Tento článek je součástí řady s návody k vytvoření a spuštění vlastních zásad v Azure Active Directory B2C. Doporučujeme spustit tuto řadu z prvního článku.

Krok 1 – Deklarace deklarací identity

Uživatel, který vybere osobní účet , musí zadat platný přístupový kód. Proto potřebujeme deklaraci identity, která bude obsahovat tuto hodnotu:

  1. V editoru ContosoCustomPolicy.XML VS Code otevřete soubor.

  2. ClaimsSchema V části deklarujte přístupový kód a deklarace identity isValidAccessCode pomocí následujícího kódu:

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

Krok 2 : Definování transformací deklarací identity

ClaimsTransformations Vyhledejte element a přidejte následující transformace deklarací identity:

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

Definovali jsme dvě transformace deklarací identity, CheckIfIsValidAccessCode a ThrowIfIsNotValidAccessCode. CheckIfIsValidAccessCode používá metodu transformace CompareClaimToValue k porovnání vstupu přístupového kódu uživatelem se statickou hodnotou 88888 (pojďme tuto hodnotu použít pro testování) a přiřadí true nebo false k deklaraci identity isValidAccessCode . ThrowIfIsNotValidAccessCode zkontroluje, jestli jsou dvě logické hodnoty dvou deklarací rovny, a vyvolá výjimku, pokud nejsou.

Krok 3 – Konfigurace nebo aktualizace technických profilů

Teď potřebujete dva nové technické profily s vlastním kontrolním výrazem, jeden pro shromáždění typu účtu a druhý pro shromáždění přístupového kódu od uživatele. Potřebujete také nový technický profil transformace deklarací identity, který ověří přístupový kód uživatele spuštěním transformací deklarací identity, které jste definovali v kroku 2. Teď, když shromažďujeme typ účtu v jiném technickém profilu s vlastním kontrolním výrazem, musíme aktualizovat UserInformationCollector technický profil s vlastním kontrolním výrazem, aby se zabránilo jeho shromažďování typu účtu.

  1. ClaimsProviders Vyhledejte element a přidejte nového zprostředkovatele deklarací identity pomocí následujícího kódu:

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

    Nakonfigurovali jsme dva technické profily, AccessCodeInputCollector a CheckAccessCodeViaClaimsTransformationChecker. Technický profil CheckAccessCodeViaClaimsTransformationChecker označujeme jako technický profil ověření z technického profilu AccessCodeInputCollector. CheckAccessCodeViaClaimsTransformationChecker je typ Transformace deklarací identity technický profil, který spouští transformace deklarací identity, které jsme definovali v kroku 2.

    AccessCodeInputCollector je technický profil, který se používá k shromáždění přístupového kódu od uživatele. EnabledForUserJourneys Obsahuje prvek, který je nastaven na OnClaimsExistence. Jeho Metadata element obsahuje deklaraci identity (accountType) a její hodnotu (osobní), která aktivuje tento technický profil.

  2. ClaimsProviders Vyhledejte element a přidejte nového zprostředkovatele deklarací identity pomocí následujícího kódu:

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

    Nakonfigurovali jsme technický profil AccountTypeInputCollector, který shromáždí typ účtu uživatele. Jedná se o hodnotu typu účtu, která určuje, jestli AccessCodeInputCollector má být aktivovaný technický profil s vlastním kontrolním výrazem.

  3. Chcete-li zabránit, aby technický profil s vlastním kontrolním UserInformationCollector výrazem shromažďoval typ účtu, vyhledejte UserInformationCollector technický profil s vlastním potvrzením a pak:

    1. accountType Odeberte deklaraci identity <DisplayClaim ClaimTypeReferenceId="accountType" Required="true"/> zobrazení z DisplayClaims kolekce.

    2. accountType Odeberte výstupní deklaraci identity <OutputClaim ClaimTypeReferenceId="accountType"/>z OutputClaims kolekce.

Krok 4 – aktualizace kroků orchestrace cesty uživatele

Teď, když jste nastavili technické profily, musíte aktualizovat kroky orchestrace cest uživatelů:

  1. Vyhledejte cestu HelloWorldJourney uživatele a přidejte všechny kroky orchestrace následujícím kódem:

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

    Kroky orchestrace ukazují, že voláme technický profil v pořadí uvedeném atributem orchestration steps Order . Technický profil se ale aktivuje, AccessCodeInputCollector pokud uživatel vybere typ účtu osobního účtu .

Krok 5 : Nahrání souboru vlastních zásad

Postupujte podle kroků v části Nahrání souboru vlastních zásad a nahrajte soubor zásad. Pokud nahráváte soubor se stejným názvem jako soubor, který už je na portálu, nezapomeňte vybrat Možnost Přepsat vlastní zásadu, pokud už existuje.

Krok 6 – otestování vlastních zásad

Postupujte podle kroků v části Otestování vlastních zásad a otestujte vlastní zásady :

  1. Na první obrazovce v části Typ účtu vyberte Osobní účet.
  2. Jako přístupový kód zadejte 88888 a pak vyberte Pokračovat.
  3. Podle potřeby zadejte zbývající podrobnosti a pak vyberte Pokračovat. Po dokončení provádění zásady budete přesměrováni na https://jwt.msa zobrazí se dekódovaný token JWT.
  4. Opakujte krok 5, ale tentokrát vyberte Typ účtu, vyberte Účet zaměstnance contoso a postupujte podle pokynů.

Další kroky

V kroku 3 povolíme nebo zakážeme technický profil pomocí elementu EnabledForUserJourneys . Případně můžete pomocí předběžných předpokladů v rámci kroků orchestrace cesty uživatele provést nebo přeskočit krok orchestrace, jak se dozvíme dále v této sérii.

Dále se dozvíte: