Delen via


Vertakking maken in gebruikerstraject met behulp van aangepast Azure Active Directory B2C-beleid

Verschillende gebruikers van dezelfde app kunnen verschillende gebruikerstrajecten volgen, afhankelijk van de waarden van de gegevens in een aangepast beleid. Met aangepaste beleidsregels van Azure Active Directory B2C (Azure AD B2C) kunt u een technisch profiel voorwaardelijk in- of uitschakelen om deze mogelijkheid te bereiken. In Invoer van gebruikers valideren met behulp van aangepast Azure AD B2C-beleid hebben we bijvoorbeeld een Precondition aangepast beleid gebruikt om te bepalen of we een technisch validatieprofiel moeten uitvoeren op basis van de waarde van accountType-claim.

Een technisch profiel biedt ook een EnabledForUserJourneys element waarmee u kunt opgeven of een technisch profiel moet worden uitgevoerd. Het EnabledForUserJourneys element bevat een van de vijf waarden, waaronder OnClaimsExistence, die u gebruikt om op te geven dat een technisch profiel alleen mag worden uitgevoerd wanneer een bepaalde claim die is opgegeven in het technische profiel bestaat. Meer informatie over het element EnabledForUserJourneys van het technische profiel.

Overzicht van scenario

In Invoer van gebruikers valideren met behulp van het aangepaste azure AD B2C-beleidsartikel voert een gebruiker de gegevens in één scherm in. In dit artikel moet een gebruiker eerst het accounttype, het Contoso-werknemersaccount of het persoonlijke account selecteren. Een gebruiker die Contoso Employee Account selecteert, kan verdergaan met het opgeven van meer informatie. Een gebruiker die persoonlijk account selecteert, moet echter een geldige toegangscode voor uitnodigingen opgeven voordat ze verder kunnen gaan met het opgeven van meer informatie. Gebruikers die het accounttype Persoonlijk account gebruiken, zien daarom een extra gebruikersinterface om hun traject te voltooien.

A flowchart of branching in user journey.

In dit artikel leert u hoe EnabledForUserJourneys u elementen in een technisch profiel gebruikt om verschillende gebruikerservaringen te maken op basis van een claimwaarde.

Vereisten

Notitie

Dit artikel maakt deel uit van de reeks instructies voor het maken en uitvoeren van uw eigen aangepaste beleidsregels in Azure Active Directory B2C. We raden u aan deze reeks te starten vanuit het eerste artikel.

Stap 1: Claims declareren

Een gebruiker die Persoonlijk account selecteert, moet een geldige toegangscode opgeven. Daarom hebben we een claim nodig om deze waarde vast te houden:

  1. Open het ContosoCustomPolicy.XML bestand in VS Code.

  2. Declareer in de ClaimsSchema sectie accessCode en isValidAccessCode-claims met behulp van de volgende code:

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

Stap 2: claimtransformaties definiëren

Zoek het ClaimsTransformations element en voeg de volgende claimtransformaties toe:

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

We hebben twee claimtransformaties gedefinieerd, CheckIfIsValidAccessCode en ThrowIfIsNotValidAccessCode. CheckIfIsValidAccessCode maakt gebruik van de transformatiemethode CompareClaimToValue om de invoer van de toegangscode door de gebruiker te vergelijken met een statische waarde 88888 (laten we deze waarde gebruiken voor testen) en wijst of isValidAccessCode-claim toetrue.false ThrowIfIsNotValidAccessCode controleert of twee booleaanse waarden van twee claims gelijk zijn en genereert een uitzondering als dat niet het is.

Stap 3: technische profielen configureren of bijwerken

U hebt nu twee nieuwe zelf-asserted technische profielen nodig, een voor het verzamelen van het accounttype en de andere voor het verzamelen van toegangscodes van de gebruiker. U hebt ook een nieuw technisch profiel voor claimtransformatietypen nodig om de toegangscode van de gebruiker te valideren door de claimtransformaties uit te voeren die u in stap 2 hebt gedefinieerd. Nu we het accounttype in een ander zelfbewust technisch profiel verzamelen, moeten we het UserInformationCollector zelf-asserted technische profiel bijwerken om te voorkomen dat het accounttype wordt verzameld.

  1. Zoek het ClaimsProviders element en voeg vervolgens een nieuwe claimprovider toe met behulp van de volgende code:

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

    We hebben twee technische profielen geconfigureerd, AccessCodeInputCollector en CheckAccessCodeViaClaimsTransformationChecker. We noemen het technische profiel CheckAccessCodeViaClaimsTransformationChecker als een validatie technisch profiel vanuit het technische profiel AccessCodeInputCollector . CheckAccessCodeViaClaimsTransformationChecker zelf is van het type claimtransformatie technisch profiel, waarmee de claimstransformaties worden uitgevoerd die we in stap 2 hebben gedefinieerd.

    AccessCodeInputCollector is een zelf-asserted technisch profiel dat wordt gebruikt om een toegangscode van de gebruiker te verzamelen. Het bevat EnabledForUserJourneys een element dat is ingesteld op OnClaimsExistence. Het Metadata element bevat een claim (accountType) en de waarde (persoonlijk) waarmee dit technische profiel wordt geactiveerd.

  2. Zoek het ClaimsProviders element en voeg vervolgens een nieuwe claimprovider toe met behulp van de volgende code:

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

    We hebben een zelf-asserted technisch profiel geconfigureerd, AccountTypeInputCollectorwaarmee het accounttype van de gebruiker wordt verzameld. Dit is de waarde van de accounttypen die bepaalt of het AccessCodeInputCollector zelf-asserted technische profiel moet worden geactiveerd.

  3. Als u wilt voorkomen dat het UserInformationCollector zelf-asserted technische profiel het accounttype verzamelt, zoekt u het UserInformationCollector zelf-asserted technische profiel en vervolgens:

    1. Verwijder de accountType weergaveclaim <DisplayClaim ClaimTypeReferenceId="accountType" Required="true"/> uit de DisplayClaims verzameling.

    2. Verwijder de accountType uitvoerclaim uit <OutputClaim ClaimTypeReferenceId="accountType"/>de OutputClaims verzameling.

Stap 4: de indelingsstappen voor gebruikersbeleving bijwerken

Nu u uw technische profielen hebt ingesteld, moet u de indelingsstappen voor uw gebruikerstraject bijwerken:

  1. Zoek uw HelloWorldJourney gebruikerstraject en voeg alle indelingsstappen toe door de volgende code:

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

    De indelingsstappen laten zien dat we het technische profiel aanroepen in de volgorde die wordt weergegeven door het kenmerk van de indelingsstappen Order . Het AccessCodeInputCollector technische profiel wordt echter geactiveerd als de gebruiker het accounttype Persoonlijk account selecteert.

Stap 5: Aangepast beleidsbestand uploaden

Volg de stappen in Het aangepaste beleidsbestand uploaden om uw beleidsbestand te uploaden. Als u een bestand met dezelfde naam uploadt als het bestand dat zich al in de portal bevindt, moet u het aangepaste beleid overschrijven selecteren als dit al bestaat.

Stap 6: het aangepaste beleid testen

Volg de stappen in Het aangepaste beleid testen om uw aangepaste beleid te testen:

  1. Selecteer in het eerste scherm voor Accounttype de optie Persoonlijk account.
  2. Voor toegangscode voert u 88888 in en selecteert u Doorgaan.
  3. Voer de rest van de details in zoals vereist en selecteer Vervolgens Doorgaan. Nadat het beleid is uitgevoerd, wordt u omgeleid naar https://jwt.msen ziet u een gedecodeerd JWT-token.
  4. Herhaal stap 5, maar selecteer dit keer accounttype, selecteer Contoso-werknemersaccount en volg de aanwijzingen.

Volgende stappen

In stap 3 schakelen we het technische profiel in of uit met behulp van het EnabledForUserJourneys element. U kunt ook Voorwaarden in de indelingsstappen van de gebruikersbeleving gebruiken om een indelingsstap uit te voeren of over te slaan, zoals we verderop in deze reeks leren.

Vervolgens leert u: