UserJourneys
Kommentar
I Azure Active Directory B2C är anpassade principer främst utformade för att hantera komplexa scenarier. I de flesta scenarier rekommenderar vi att du använder inbyggda användarflöden. Om du inte har gjort det kan du läsa mer om startpaketet för anpassad princip i Kom igång med anpassade principer i Active Directory B2C.
Användarresor anger explicita sökvägar genom vilka en princip tillåter att ett anspråksbaserat program hämtar önskade anspråk för en användare. Via dessa sökvägar kan användaren hämta de anspråk som ska presenteras för den förlitande parten. Med andra ord definierar användarresor affärslogik för vad en slutanvändare går igenom när Azure AD B2C Identity Experience Framework bearbetar begäran.
Dessa användarresor kan betraktas som mallar som är tillgängliga för att uppfylla de grundläggande behoven hos de olika förlitande parterna i samhället av intresse. Användarresor underlättar definitionen av den förlitande partens del av en princip. En princip kan definiera flera användarresor. Varje användarresa är en sekvens med orkestreringssteg.
För att definiera de användarresor som stöds av principen läggs ett UserJourneys
element till under elementet på den översta nivån TrustFrameworkPolicy
i principfilen.
<TrustFrameworkPolicy ...>
...
<UserJourneys>
...
</UserJourneys>
</TrustFrameworkPolicy>
Elementet UserJourneys innehåller följande element:
Element | Händelser | beskrivning |
---|---|---|
UserJourney | 1:n | En användarresa som definierar alla konstruktioner som krävs för ett fullständigt användarflöde. |
Elementet UserJourney innehåller följande attribut:
Attribut | Obligatoriskt | Beskrivning |
---|---|---|
Id | Ja | En identifierare för en användarresa som kan användas för att referera till den från andra element i principen. Elementet DefaultUserJourney i den förlitande partens princip pekar på det här attributet. |
DefaultCpimIssuerTechnicalProfileReferenceId | Nej | Standardreferens-ID för tokenutfärdare för teknisk profil. Till exempel JWT-tokenutfärdare, SAML-tokenutfärdare eller OAuth2-anpassat fel. Om din användarresa eller underresa redan har ett annat SendClaims orkestreringssteg anger du DefaultCpimIssuerTechnicalProfileReferenceId attributet till användarens tekniska profil för token utfärdare. |
Elementet UserJourney innehåller följande element:
Element | Händelser | beskrivning |
---|---|---|
AuthorizationTechnicalProfiles | 0:1 | Lista över tekniska auktoriseringsprofiler. |
OrchestrationSteps | 1:n | En orkestreringssekvens som måste följas upp för en lyckad transaktion. Varje användarresa består av en ordnad lista över orkestreringssteg som körs i följd. Om något steg misslyckas misslyckas transaktionen. |
AuthorizationTechnicalProfiles
Anta att en användare har slutfört en UserJourney och fått en åtkomst eller en ID-token. Om du vill hantera ytterligare resurser, till exempel UserInfo-slutpunkten, måste användaren identifieras. För att påbörja den här processen måste användaren presentera den åtkomsttoken som utfärdades tidigare som ett bevis på att de ursprungligen autentiserades av en giltig Azure AD B2C-princip. En giltig token för användaren måste alltid finnas under den här processen för att säkerställa att användaren får göra den här begäran. Tekniska auktoriseringsprofiler verifierar den inkommande token och extraherar anspråk från token.
Elementet AuthorizationTechnicalProfiles innehåller följande element:
Element | Händelser | beskrivning |
---|---|---|
AuthorizationTechnicalProfile | 0:1 | Den tekniska profilreferens som används för att auktorisera användaren. |
Elementet AuthorizationTechnicalProfile innehåller följande attribut:
Attribut | Obligatoriskt | Beskrivning |
---|---|---|
ReferenceId | Ja | Identifieraren för den tekniska profil som ska köras. |
I följande exempel visas ett användarresa-element med tekniska auktoriseringsprofiler:
<UserJourney Id="UserInfoJourney" DefaultCpimIssuerTechnicalProfileReferenceId="UserInfoIssuer">
<Authorization>
<AuthorizationTechnicalProfiles>
<AuthorizationTechnicalProfile ReferenceId="UserInfoAuthorization" />
</AuthorizationTechnicalProfiles>
</Authorization>
<OrchestrationSteps>
<OrchestrationStep Order="1" Type="ClaimsExchange">
...
OrchestrationSteps
En användarresa representeras som en orkestreringssekvens som måste följas upp för en lyckad transaktion. Om något steg misslyckas misslyckas transaktionen. Dessa orkestreringssteg refererar till både byggstenarna och anspråksprovidrar som tillåts i principfilen. Alla orkestreringssteg som ansvarar för att visa eller återge en användarupplevelse har också en referens till motsvarande innehållsdefinitionsidentifierare.
Orkestreringssteg kan köras villkorligt baserat på förhandsvillkor som definierats i orkestreringsstegelementet. Du kan till exempel kontrollera att endast utföra ett orkestreringssteg om det finns ett specifikt anspråk, eller om ett anspråk är lika med eller inte med det angivna värdet.
Om du vill ange den ordnade listan över orkestreringssteg läggs ett OrchestrationSteps-element till som en del av principen. Det här elementet krävs.
<UserJourney Id="SignUpOrSignIn">
<OrchestrationSteps>
<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
...
Elementet OrchestrationSteps innehåller följande element:
Element | Händelser | beskrivning |
---|---|---|
OrchestrationStep | 1:n | Ett ordnat orkestreringssteg. |
Elementet OrchestrationStep innehåller följande attribut:
Attribut | Obligatoriskt | Beskrivning |
---|---|---|
Order |
Ja | Orkestreringsstegens ordning. Värdet för Order attributet börjar via 1 N . Så om du har 10 steg och tar bort det andra steget måste du numrera om stegen tre till tio för att bli två till nio. |
Type |
Ja | Typ av orkestreringssteg. Möjliga värden:
|
ContentDefinitionReferenceId | Nej | Identifieraren för innehållsdefinitionen som är associerad med det här orkestreringssteget. Vanligtvis definieras referensidentifieraren för innehållsdefinition i den självsäkra tekniska profilen. Men det finns vissa fall när Azure AD B2C behöver visa något utan en teknisk profil. Det finns två exempel – om typen av orkestreringssteg är något av följande: ClaimsProviderSelection eller CombinedSignInAndSignUp måste Azure AD B2C visa valet av identitetsprovider utan att ha en teknisk profil. |
CpimIssuerTechnicalProfileReferenceId | Nej | Orkestreringsstegets typ är SendClaims . Den här egenskapen definierar den tekniska profilidentifieraren för anspråksprovidern som utfärdar token för den förlitande parten. Om den saknas skapas ingen förlitande parttoken. |
Elementet OrchestrationStep kan innehålla följande element:
Element | Händelser | beskrivning |
---|---|---|
Förvillkor | 0:n | En lista över förhandsvillkor som måste uppfyllas för att orkestreringssteget ska kunna köras. |
ClaimsProviderSelections | 0:n | En lista över val av anspråksprovider för orkestreringssteget. |
ClaimsExchanges | 0:n | En lista över anspråksutbyten för orkestreringssteget. |
JourneyList | 0:1 | En lista över underresa kandidater för orkestreringssteget. |
Förvillkor
Orkestreringssteg kan köras villkorligt baserat på förhandsvillkor som definierats i orkestreringssteget. Elementet Preconditions
innehåller en lista över förhandsvillkor att utvärdera. När förhandsutvärderingen är uppfylld hoppar det associerade orkestreringssteget till nästa orkestreringssteg.
Azure AD B2C utvärderar förhandsvillkoren i listordning. Med de ordningsbaserade förhandsvillkoren kan du ange i vilken ordning förhandsvillkoren ska tillämpas. Den första förutsättningen som uppfylldes åsidosätter alla efterföljande förhandsvillkor. Orkestreringssteget körs endast om alla förhandsvillkor inte uppfylls.
Elementet Villkor innehåller följande element:
Element | Händelser | beskrivning |
---|---|---|
Förhandsvillkor | 1:n | En förutsättning för att utvärdera. |
Förhandsvillkor
Elementet Precondition innehåller följande attribut:
Attribut | Obligatoriskt | Beskrivning |
---|---|---|
Type |
Ja | Typen av kontroll eller fråga som ska utföras för den här förhandsvillkoret. Värdet kan vara ClaimsExist, som anger att åtgärderna ska utföras om de angivna anspråken finns i användarens aktuella anspråksuppsättning, eller ClaimEquals, som anger att åtgärderna ska utföras om det angivna anspråket finns och dess värde är lika med det angivna värdet. |
ExecuteActionsIf |
Ja | Avgör hur förhandsvillkoret anses vara uppfyllt. Möjliga värden: true , eller false . Om värdet är inställt på true anses det vara uppfyllt när anspråket matchar förhandsvillkoret. Om värdet är inställt på false anses det vara uppfyllt när anspråket inte matchar förhandsvillkoret. |
Elementen Villkor innehåller följande element:
Element | Händelser | beskrivning |
---|---|---|
Värde | 1:2 | Identifieraren för en anspråkstyp. Anspråket har redan definierats i avsnittet anspråksschema i principfilen eller den överordnade principfilen. När förhandsvillkoret är typ av ClaimEquals innehåller ett andra Value element det värde som ska kontrolleras. |
Åtgärd | 1:1 | Den åtgärd som ska utföras om förhandsvillkorsutvärderingen är uppfylld. Möjligt värde: SkipThisOrchestrationStep . Det associerade orkestreringssteget hoppar till nästa. |
Varje förhandsvillkor utvärderar ett enda anspråk. Det finns två typer av förhandsvillkor:
ClaimsExist – Anger att åtgärderna ska utföras om de angivna anspråken finns i användarens aktuella anspråkspåse.
ClaimEquals – Anger att åtgärderna ska utföras om det angivna anspråket finns och dess värde är lika med det angivna värdet. Kontrollen utför en skiftlägeskänslig ordningstalsjämförelse. När du kontrollerar boolesk anspråkstyp använder du
True
, ellerFalse
.Om anspråket är null eller uninitialiserat ignoreras förhandsvillkoret, oavsett om
ExecuteActionsIf
ärtrue
, ellerfalse
. Vi rekommenderar att du kontrollerar både att anspråket finns och är lika med ett värde.
Ett exempelscenario skulle vara att utmana användaren för MFA om användaren har MfaPreference
angett till Phone
. Om du vill utföra den här villkorliga logiken kontrollerar du om anspråket MfaPreference
finns och kontrollerar även att anspråksvärdet är Phone
lika med . Följande XML visar hur du implementerar den här logiken med förhandsvillkor.
<Preconditions>
<!-- Skip this orchestration step if MfaPreference doesn't exist. -->
<Precondition Type="ClaimsExist" ExecuteActionsIf="false">
<Value>MfaPreference</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
<!-- Skip this orchestration step if MfaPreference doesn't equal to Phone. -->
<Precondition Type="ClaimEquals" ExecuteActionsIf="false">
<Value>MfaPreference</Value>
<Value>Phone</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
Exempel på förhandsvillkor
Följande förhandsvillkor kontrollerar om användarens objectId finns. Under användarresan har användaren valt att logga in med ett lokalt konto. Om objectId finns hoppar du över det här orkestreringssteget.
<OrchestrationStep Order="2" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="true">
<Value>objectId</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="FacebookExchange" TechnicalProfileReferenceId="Facebook-OAUTH" />
<ClaimsExchange Id="SignUpWithLogonEmailExchange" TechnicalProfileReferenceId="LocalAccountSignUpWithLogonEmail" />
</ClaimsExchanges>
</OrchestrationStep>
Följande förhandsvillkor kontrollerar om användaren har loggat in med ett socialt konto. Ett försök görs att hitta användarkontot i katalogen. Om användaren loggar in eller registrerar sig med ett lokalt konto hoppar du över det här orkestreringssteget.
<OrchestrationStep Order="3" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimEquals" ExecuteActionsIf="true">
<Value>authenticationSource</Value>
<Value>localAccountAuthentication</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="AADUserReadUsingAlternativeSecurityId" TechnicalProfileReferenceId="AAD-UserReadUsingAlternativeSecurityId-NoError" />
</ClaimsExchanges>
</OrchestrationStep>
Förhandsvillkor kan kontrollera flera förhandsvillkor. I följande exempel kontrolleras om "objectId" eller "email" finns. Om det första villkoret är sant går resan vidare till nästa orkestreringssteg.
<OrchestrationStep Order="4" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="true">
<Value>objectId</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
<Precondition Type="ClaimsExist" ExecuteActionsIf="true">
<Value>email</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="SelfAsserted-SocialEmail" TechnicalProfileReferenceId="SelfAsserted-SocialEmail" />
</ClaimsExchanges>
</OrchestrationStep>
Val av anspråksprovider
Med val av anspråksprovider kan användarna välja en åtgärd från en lista med alternativ. Valet av identitetsprovider består av ett par med två orkestreringssteg:
- Knappar – Den börjar med typen
ClaimsProviderSelection
, ellerCombinedSignInAndSignUp
som innehåller en lista med alternativ som en användare kan välja mellan. Ordningen på alternativen i elementetClaimsProviderSelections
styr ordningen på knapparna som visas för användaren. - Åtgärder – följt av
ClaimsExchange
typen . ClaimsExchange innehåller en lista över åtgärder. Åtgärden är en referens till en teknisk profil, till exempel OAuth2, OpenID Connect, anspråkstransformering eller självbetitlade. När en användare klickar på någon av knapparna körs motsvarande åtgärd.
Elementet ClaimsProviderSelections innehåller följande element:
Element | Händelser | beskrivning |
---|---|---|
ClaimsProviderSelection | 1:n | Innehåller en lista över anspråksproviders som kan väljas. |
Elementet ClaimsProviderSelections innehåller följande attribut:
Elementet ClaimsProviderSelection innehåller följande attribut:
Attribut | Obligatoriskt | Beskrivning |
---|---|---|
TargetClaimsExchangeId | Nej | Identifieraren för anspråksutbytet, som körs i nästa orkestreringssteg i valet av anspråksprovider. Det här attributet eller attributet ValidationClaimsExchangeId måste anges, men inte båda. |
ValidationClaimsExchangeId | Nej | Identifieraren för anspråksutbytet, som körs i det aktuella orkestreringssteget för att verifiera valet av anspråksprovider. Det här attributet eller attributet TargetClaimsExchangeId måste anges, men inte båda. |
Exempel på val av anspråksprovider
I följande orkestreringssteg kan användaren välja att logga in med Facebook, LinkedIn, X, Google eller ett lokalt konto. Om användaren väljer en av de sociala identitetsprovidrar körs det andra orkestreringssteget med det valda anspråksutbytet som anges i TargetClaimsExchangeId
attributet. Det andra orkestreringssteget omdirigerar användaren till den sociala identitetsprovidern för att slutföra inloggningsprocessen. Om användaren väljer att logga in med det lokala kontot förblir Azure AD B2C på samma orkestreringssteg (samma registreringssida eller inloggningssida) och hoppar över det andra orkestreringssteget.
<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
<ClaimsProviderSelections>
<ClaimsProviderSelection TargetClaimsExchangeId="FacebookExchange" />
<ClaimsProviderSelection TargetClaimsExchangeId="LinkedInExchange" />
<ClaimsProviderSelection TargetClaimsExchangeId="TwitterExchange" />
<ClaimsProviderSelection TargetClaimsExchangeId="GoogleExchange" />
<ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" />
</ClaimsProviderSelections>
<ClaimsExchanges>
<ClaimsExchange Id="LocalAccountSigninEmailExchange"
TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" />
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="true">
<Value>objectId</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="FacebookExchange" TechnicalProfileReferenceId="Facebook-OAUTH" />
<ClaimsExchange Id="SignUpWithLogonEmailExchange" TechnicalProfileReferenceId="LocalAccountSignUpWithLogonEmail" />
<ClaimsExchange Id="GoogleExchange" TechnicalProfileReferenceId="Google-OAUTH" />
<ClaimsExchange Id="LinkedInExchange" TechnicalProfileReferenceId="LinkedIn-OAUTH" />
<ClaimsExchange Id="TwitterExchange" TechnicalProfileReferenceId="Twitter-OAUTH1" />
</ClaimsExchanges>
</OrchestrationStep>
ClaimsExchanges
Elementet ClaimsExchanges innehåller följande element:
Element | Händelser | beskrivning |
---|---|---|
ClaimsExchange | 1:n | Beroende på vilken teknisk profil som används omdirigeras klienten enligt den valda ClaimsProviderSelection eller gör ett serveranrop för att utbyta anspråk. |
Elementet ClaimsExchange innehåller följande attribut:
Attribut | Obligatoriskt | Beskrivning |
---|---|---|
Id | Ja | En identifierare för anspråksutbytessteget. Identifieraren används för att referera till anspråksutbytet från ett urvalssteg för anspråksprovidern i principen. |
TechnicalProfileReferenceId | Ja | Identifieraren för den tekniska profil som ska köras. |
JourneyList
JourneyList-elementet innehåller följande element:
Element | Händelser | beskrivning |
---|---|---|
Kandidat | 1:1 | En referens till en underresa som ska anropas. |
Kandidat
Elementet Candidate innehåller följande attribut:
Attribut | Obligatoriskt | Beskrivning |
---|---|---|
SubJourneyReferenceId | Ja | Identifieraren för den underresa som ska köras. |