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.
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
Als u er nog geen hebt, maakt u een Azure AD B2C-tenant die is gekoppeld aan uw Azure-abonnement.
Registreer een webtoepassing en schakel impliciete toekenning van id-token in. Gebruik voor de omleidings-URI https://jwt.ms.
Visual Studio Code (VS Code) moet op uw computer zijn geïnstalleerd.
Voer de stappen uit in Invoer van gebruikers valideren met behulp van aangepast Azure AD B2C-beleid. Dit artikel maakt deel uit van de reeks instructies voor het maken en uitvoeren van uw eigen aangepaste beleidsregels.
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:
Open het
ContosoCustomPolicy.XML
bestand in VS Code.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.
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. HetMetadata
element bevat een claim (accountType) en de waarde (persoonlijk) waarmee dit technische profiel wordt geactiveerd.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,
AccountTypeInputCollector
waarmee het accounttype van de gebruiker wordt verzameld. Dit is de waarde van de accounttypen die bepaalt of hetAccessCodeInputCollector
zelf-asserted technische profiel moet worden geactiveerd.Als u wilt voorkomen dat het
UserInformationCollector
zelf-asserted technische profiel het accounttype verzamelt, zoekt u hetUserInformationCollector
zelf-asserted technische profiel en vervolgens:Verwijder de
accountType
weergaveclaim<DisplayClaim ClaimTypeReferenceId="accountType" Required="true"/>
uit deDisplayClaims
verzameling.Verwijder de
accountType
uitvoerclaim uit<OutputClaim ClaimTypeReferenceId="accountType"/>
deOutputClaims
verzameling.
Stap 4: de indelingsstappen voor gebruikersbeleving bijwerken
Nu u uw technische profielen hebt ingesteld, moet u de indelingsstappen voor uw gebruikerstraject bijwerken:
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
. HetAccessCodeInputCollector
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:
- Selecteer in het eerste scherm voor Accounttype de optie Persoonlijk account.
- Voor toegangscode voert u 88888 in en selecteert u Doorgaan.
- Voer de rest van de details in zoals vereist en selecteer Vervolgens Doorgaan. Nadat het beleid is uitgevoerd, wordt u omgeleid naar
https://jwt.ms
en ziet u een gedecodeerd JWT-token. - 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:
Over de voorwaarden voor indeling van gebruikerstrajecten.
Het TrustFrameworkPolicy-schemabestand gebruiken om Azure AD B2C-beleidsbestanden te valideren.