Informationen zu Anspruchskonfliktlösern in benutzerdefinierten Azure Active Directory B2C-Richtlinien
Anspruchskonfliktlöser in benutzerdefinierten Richtlinien von Azure Active Directory B2C (Azure AD B2C) bieten Kontextinformationen über eine Autorisierungsanforderung, z. B. den Namen der Richtlinie, die Korrelations-ID der Anforderung, die Sprache der Benutzeroberfläche und mehr.
Um einen Anspruchskonfliktlöser in einem Ein- oder Ausgabeanspruch zu verwenden, definieren Sie eine Zeichenfolge ClaimTypeunter dem ClaimsSchema-Element, und dann Sie legen Sie den DefaultValue auf den Anspruchskonfliktlöser in dem Ein- oder Ausgabeanspruchselement fest. Azure AD B2C liest den Wert des Anspruchskonfliktlösers und verwendet den Wert in dem technischen Profil.
Im folgenden Beispiel, wird ein Anspruchstyp namens correlationId
definiert mit einem DataType von string
.
<ClaimType Id="correlationId">
<DisplayName>correlationId</DisplayName>
<DataType>string</DataType>
<UserHelpText>Request correlation Id</UserHelpText>
</ClaimType>
Ordnen Sie im technischen Profil den Anspruchskonfliktlöser dem Anspruchstyp zu. Azure AD B2C füllt den Wert des Anspruchskonfliktlösers {Context:CorrelationId}
in den Anspruch correlationId
auf, und sende den Anspruch an den technische Profil.
<InputClaim ClaimTypeReferenceId="correlationId" DefaultValue="{Context:CorrelationId}" />
Kultur
In der folgenden Tabelle sind die Anspruchskonfliktlöser mit Informationen zur Sprache aufgeführt, die in der Autorisierungsanforderung verwendet wird:
Anspruch | BESCHREIBUNG | Beispiel |
---|---|---|
{Culture:LanguageName} | Der aus zwei Buchstaben bestehende ISO-Code für die Sprache. | en |
{Culture:LCID} | Die LCID des Sprachcodes. | 1033 |
{Culture:RegionName} | Der aus zwei Buchstaben bestehende ISO-Code für die Region. | US |
{Culture:RFC5646} | Der Sprachcode RFC5646. | de-DE |
Sehen Sie sich die Livedemo der Konfliktlöser für Kulturansprüche an.
Richtlinie
In der folgenden Tabelle sind die Anspruchskonfliktlöser mit Informationen zur Richtlinie aufgeführt, die in der Autorisierungsanforderung verwendet wird:
Anspruch | BESCHREIBUNG | Beispiel |
---|---|---|
{Policy:PolicyId} | Der Name der Richtlinie für die vertrauende Seite. | B2C_1A_signup_signin |
{Policy:RelyingPartyTenantId} | Die Mandanten-ID der Richtlinie für die vertrauende Seite. | Ihr-Mandan.onmicrosoft.com |
{Policy:TenantObjectId} | Die Mandantenobjekt-ID der Richtlinie für die vertrauende Seite. | 00000000-0000-0000-0000-000000000000 |
{Policy:TrustFrameworkTenantId} | Die Mandanten-ID des Vertrauensframeworks. | Ihr-Mandan.onmicrosoft.com |
Sehen Sie sich die Livedemo der Konfliktlöser für Richtlinienansprüche an.
Kontext
In der folgenden Tabelle sind die kontextbezogenen Anspruchskonfliktlöser der Autorisierungsanforderung aufgeführt:
Anspruch | BESCHREIBUNG | Beispiel |
---|---|---|
{Context:BuildNumber} | Die Version des Frameworks für die Identitätsfunktion (Buildnummer). | 1.0.507.0 |
{Context:CorrelationId} | Die Korrelations-ID. | 00000000-0000-0000-0000-000000000000 |
{Context:DateTimeInUtc} | Datum und Uhrzeit in UTC. | 10/10/2021 12:00:00 PM |
{Context:DeploymentMode} | Die Methode zur Richtlinienbereitstellung. | Bereitstellung |
{Context:HostName} | Der Hostname der aktuellen Anforderung. | contoso.b2clogin.com |
{Context:IPAddress} | Die Benutzer-IP-Adresse. | 11.111.111.11 |
{Context:KMSI} | Gibt an, ob das Kontrollkästchen Angemeldet bleiben aktiviert ist. | true |
Sehen Sie sich die Livedemo der Konfliktlöser für Kontextansprüche an.
Ansprüche
In diesem Abschnitt wird beschrieben, wie Sie einen Anspruchswert als Anspruchskonfliktlöser abrufen.
Anspruch | BESCHREIBUNG | Beispiel |
---|---|---|
{Claim:claim type} | Ein Bezeichner eines Anspruchstyps, der bereits im Abschnitt „ClaimsSchema“ in der Richtliniendatei oder der übergeordneten Richtliniendatei definiert ist. Beispiel: {Claim:displayName} oder {Claim:objectId} |
Ein Wert eines Anspruchstyps. |
OpenID Connect
In der folgenden Tabelle sind die Anspruchskonfliktlöser mit Informationen zur OpenID Connect Autorisierungsanforderung aufgeführt:
Anspruch | BESCHREIBUNG | Beispiel |
---|---|---|
{OIDC:AuthenticationContextReferences} | Der Abfragezeichenfolgen-Parameter acr_values . |
– |
{OIDC:ClientId} | Der Abfragezeichenfolgen-Parameter client_id . |
00000000-0000-0000-0000-000000000000 |
{OIDC:DomainHint} | Der Abfragezeichenfolgen-Parameter domain_hint . |
facebook.com |
{OIDC:LoginHint} | Der Abfragezeichenfolgen-Parameter login_hint . |
someone@contoso.com |
{OIDC:MaxAge} | Das max_age . |
– |
{OIDC:Nonce} | Der Abfragezeichenfolgen-Parameter Nonce . |
defaultNonce |
{OIDC:Password} | Das Benutzerkennwort aus dem Flow für Kennwortanmeldeinformationen von Ressourcenbesitzern | password1 |
{OIDC:Prompt} | Der Abfragezeichenfolgen-Parameter prompt . |
login |
{OIDC:RedirectUri} | Der Abfragezeichenfolgen-Parameter redirect_uri . |
https://jwt.ms |
{OIDC:Resource} | Der Abfragezeichenfolgen-Parameter resource . |
– |
{OIDC:Scope} | Der Abfragezeichenfolgen-Parameter scope . |
openid |
{OIDC:Username} | Der Benutzername des Benutzers aus dem Flow für Kennwortanmeldeinformationen von Ressourcenbesitzern | emily@contoso.com |
{OIDC:IdToken} | Der Abfragezeichenfolgen-Parameter id token . |
N/V |
Sehen Sie sich die Livedemo der Konfliktlöser für OpenID Connect-Ansprüche an.
OAuth2-Schlüssel-Wert-Parameter
Jeder Parametername, der als Bestandteil einer OIDC- oder OAuth2-Anforderung eingeschlossen wird, kann einem Anspruch in der User Journey zugeordnet werden. Beispielsweise kann die Anforderung von der Anwendung einen Abfragezeichenfolgen-Parameter mit einem der Namen app_session
oder loyalty_number
oder eine beliebige benutzerdefinierte Abfragezeichenfolge enthalten.
Anspruch | BESCHREIBUNG | Beispiel |
---|---|---|
{OAUTH-KV:campaignId} | Ein Abfragezeichenfolgen-Parameter. | Hawaii |
{OAUTH-KV:app_session} | Ein Abfragezeichenfolgen-Parameter. | A3C5R |
{OAUTH-KV:loyalty_number} | Ein Abfragezeichenfolgen-Parameter. | 1234 |
{OAUTH-KV:beliebige benutzerdefinierte Abfragezeichenfolge} | Ein Abfragezeichenfolgen-Parameter. | N/V |
SAML-Schlüsselwertparameter
In einer SAML-Authentifizierungsanforderung kann jeder Parametername, der in der Anforderung enthalten ist, jedoch nicht spezifisch für das Protokoll (z. B. SAMLRequest) einem Anspruch in der Benutzerreise zugeordnet werden. Die Anforderung kann z. B. einen benutzerdefinierten Parameter enthalten, z username
. B. . Dies gilt sowohl für vom SP initiierte als auch für IDP-initiierte SAML-Anforderungen.
Anspruch | BESCHREIBUNG | Beispiel |
---|---|---|
{SAML-KV:username} | Abfragezeichenfolge oder POST-Textparameter. | username@domain.com |
{SAML-KV:loyalty_number} | Abfragezeichenfolge oder POST-Textparameter. | 1234 |
{SAML-KV:any custom query string} | Abfragezeichenfolge oder POST-Textparameter. | N/V |
SAML
In der folgenden Tabelle sind die Anspruchskonfliktlöser mit Informationen zur SAML-Autorisierungsanforderung aufgeführt:
Anspruch | BESCHREIBUNG | Beispiel |
---|---|---|
{SAML:AuthnContextClassReferences} | Der Wert des AuthnContextClassRef -Elements aus der SAML-Anforderung. |
urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport |
{SAML:NameIdPolicyFormat} | Das Format -Attribut aus dem NameIDPolicy -Element der SAML-Anforderung. |
urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress |
{SAML:Issuer} | Der Wert des SAML-Issuer -Elements aus der SAML-Anforderung. |
https://contoso.com |
{SAML:AllowCreate} | Der Wert des AllowCreate -Attributs aus dem NameIDPolicy -Element der SAML-Anforderung. |
True |
{SAML:ForceAuthn} | Der Wert des ForceAuthN -Attributs aus dem AuthnRequest -Element der SAML-Anforderung. |
True |
{SAML:ProviderName} | Der Wert des ProviderName -Attributs aus dem AuthnRequest -Element der SAML-Anforderung. |
Contoso.com |
{SAML:RelayState} | Der Abfragezeichenfolgen-Parameter RelayState . |
|
{SAML:Subject} | Der Antragsteller (Subject ) aus dem Element „NameId“ der SAML-AuthN-Anforderung. |
|
{SAML:Binding} | Der Wert des ProtocolBinding -Attributs aus dem AuthnRequest -Element der SAML-Anforderung. |
urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST |
Sehen Sie sich die Livedemo der Konfliktlöser für SAML-Ansprüche an.
OAuth2-Identitätsanbieter
In der folgenden Tabelle sind die Anspruchskonfliktlöser des OAuth2-Identitätsanbieters aufgeführt:
Anspruch | BESCHREIBUNG | Beispiel |
---|---|---|
{oauth2:access_token} | Zugriffstoken des OAuth2-Identitätsanbieters. Das access_token -Attribut. |
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1Ni... |
{oauth2:token_type} | Typ des Zugriffstokens. Das token_type -Attribut. |
Bearer |
{oauth2:expires_in} | Gibt an, wie lange das Zugriffstoken gültig ist (in Sekunden). Das expires_in -Attribut. Der Ausgabeanspruch DataType muss int oder long lauten. |
960000 |
{oauth2:refresh_token} | Aktualisierungstoken des OAuth2-Identitätsanbieters. Das refresh_token -Attribut. |
eyJraWQiOiJacW9pQlp2TW5pYVc2MUY... |
Um die Anspruchskonfliktlöser des OAuth2-Identitätsanbieters zu verwenden, legen Sie im Ausgabeanspruch das Attribut PartnerClaimType
auf den Anspruchskonfliktlöser fest. Im folgenden Beispiel wird veranschaulicht, wie die Ansprüche des externen Identitätsanbieters abrufen:
<ClaimsProvider>
<DisplayName>Contoso</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="Contoso-OAUTH">
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="identityProviderAccessToken" PartnerClaimType="{oauth2:access_token}" />
<OutputClaim ClaimTypeReferenceId="identityProviderAccessTokenType" PartnerClaimType="{oauth2:token_type}" />
<OutputClaim ClaimTypeReferenceId="identityProviderAccessTokenExpiresIn" PartnerClaimType="{oauth2:expires_in}" />
<OutputClaim ClaimTypeReferenceId="identityProviderRefreshToken" PartnerClaimType="{oauth2:refresh_token}" />
</OutputClaims>
...
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
Verwenden von Anspruchskonfliktlösern
Sie können Anspruchskonfliktlöser mit den folgenden Elementen verwenden:
Element | Element | Einstellungen |
---|---|---|
Technisches Profil „Application Insights“ | InputClaim |
|
Microsoft Entra technisches Profil | InputClaim , OutputClaim |
1, 2 |
OAuth2: technisches Profil | InputClaim , OutputClaim |
1, 2 |
OpenID Connect: technisches Profil | InputClaim , OutputClaim |
1, 2 |
Anspruchstransformation: technisches Profil | InputClaim , OutputClaim |
1, 2 |
RESTful-Anbieter: technisches Profil | InputClaim |
1, 2 |
SAML-Identitätsanbieter: technisches Profil | OutputClaim |
1, 2 |
Selbstbestätigt: technisches Profil | InputClaim , OutputClaim |
1, 2 |
ContentDefinition | LoadUri |
|
ContentDefinitionParameters | Parameter |
|
RelyingParty: technisches Profil | OutputClaim |
2 |
Einstellungen:
- Die
IncludeClaimResolvingInClaimsHandling
-Metadaten müssen auftrue
festgelegt werden. - Das Eingabe- oder Ausgabeanspruchsattribut
AlwaysUseDefaultValue
muss auftrue
festgelegt werden.
Beispiele für Anspruchskonfliktlöser
Technisches Profil „RESTful“
In einem technischen RESTful-Profil können Sie die Sprache des Benutzers, den Richtliniennamen, den Bereich und die Client-ID senden. Basierend auf den Ansprüchen kann die REST-API eine benutzerdefinierte Geschäftslogik ausführen und bei Bedarf eine lokalisierte Fehlermeldung auslösen.
Das folgende Beispiel zeigt ein technisches RESTful-Profil mit diesem Szenario:
<TechnicalProfile Id="REST">
<DisplayName>Validate user input data and return loyaltyNumber claim</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://your-app.azurewebsites.net/api/identity</Item>
<Item Key="AuthenticationType">None</Item>
<Item Key="SendClaimsIn">Body</Item>
<Item Key="IncludeClaimResolvingInClaimsHandling">true</Item>
</Metadata>
<InputClaims>
<InputClaim ClaimTypeReferenceId="userLanguage" DefaultValue="{Culture:LCID}" AlwaysUseDefaultValue="true" />
<InputClaim ClaimTypeReferenceId="policyName" DefaultValue="{Policy:PolicyId}" AlwaysUseDefaultValue="true" />
<InputClaim ClaimTypeReferenceId="scope" DefaultValue="{OIDC:Scope}" AlwaysUseDefaultValue="true" />
<InputClaim ClaimTypeReferenceId="clientId" DefaultValue="{OIDC:ClientId}" AlwaysUseDefaultValue="true" />
</InputClaims>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>
Direkte Anmeldung
Bei der Verwendung von Anspruchskonfliktlösern können Sie den Anmeldenamen auffüllen oder sich direkt bei einem bestimmten sozialen Netzwerk als Identitätsanbieter anmelden, wie z. B. bei einem Facebook-, LinkedIn- oder Microsoft-Konto. Weitere Informationen finden Sie unter Einrichten einer direkten Anmeldung mit Azure Active Directory B2C.
Dynamische Benutzeroberflächenanpassung
Mit Azure AD B2C können Sie Abfragezeichenfolgen-Parameter an Ihre HTML-Inhaltsdefinitions-Endpunkte übergeben, um den Seiteninhalt dynamisch zu rendern. Mit diesem Feature können Sie z. B. das Hintergrundbild auf der Azure AD B2C-Registrierungs- oder Anmeldeseite auf der Basis eines benutzerdefinierten Parameters ändern, den Sie von der Web- oder Mobilanwendung übergeben. Weitere Informationen finden Sie unter Dynamisches Konfigurieren der Benutzeroberfläche mithilfe von benutzerdefinierten Richtlinien in Azure Active Directory B2C. Sie können Ihre HTML-Seite auch auf Grundlage eines Sprachparameters lokalisieren, oder Sie können den Inhalt basierend auf der Client-ID ändern.
Im folgenden Beispiel wird in der Abfragezeichenfolge ein Parameter namens campaignId mit einem Wert von Hawaii
, einem language-Code (Sprache) von en-US
und app für die Client-ID übergeben:
<UserJourneyBehaviors>
<ContentDefinitionParameters>
<Parameter Name="campaignId">{OAUTH-KV:campaignId}</Parameter>
<Parameter Name="language">{Culture:RFC5646}</Parameter>
<Parameter Name="app">{OIDC:ClientId}</Parameter>
</ContentDefinitionParameters>
</UserJourneyBehaviors>
Als Resultat sendet Azure AD B2C die oben genannten Parameter an die HTML-Inhaltsseite:
/selfAsserted.aspx?campaignId=hawaii&language=en-US&app=0239a9cc-309c-4d41-87f1-31288feb2e82
Inhaltsdefinition
In einer ContentDefinition LoadUri
können Sie Anspruchskonfliktlöser senden, um Inhalt von verschiedenen Speicherorten basierend auf den verwendeten Parametern abzurufen.
<ContentDefinition Id="api.signuporsignin">
<LoadUri>https://contoso.blob.core.windows.net/{Culture:LanguageName}/myHTML/unified.html</LoadUri>
...
</ContentDefinition>
Technisches Profil „Application Insights“
Mit Azure Application Insights und Anspruchskonfliktlösern können Sie Einblicke in Benutzerverhalten gewinnen. Im technischen Profil „Application Insights“ senden Sie Eingabeansprüche, die in Azure Application Insights persistent gespeichert werden. Weitere Informationen finden Sie unter Nachverfolgen des Benutzerverhaltens in Azure AD B2C-Journeys mithilfe von Application Insights. Im folgende Beispiel wird die Richtlinien-ID, die Korrelations-ID, die Sprache und die Client-ID an Azure Application Insights gesendet.
<TechnicalProfile Id="AzureInsights-Common">
<DisplayName>Alternate Email</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.Insights.AzureApplicationInsightsProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
...
<InputClaims>
<InputClaim ClaimTypeReferenceId="PolicyId" PartnerClaimType="{property:Policy}" DefaultValue="{Policy:PolicyId}" />
<InputClaim ClaimTypeReferenceId="CorrelationId" PartnerClaimType="{property:CorrelationId}" DefaultValue="{Context:CorrelationId}" />
<InputClaim ClaimTypeReferenceId="language" PartnerClaimType="{property:language}" DefaultValue="{Culture:RFC5646}" />
<InputClaim ClaimTypeReferenceId="AppId" PartnerClaimType="{property:App}" DefaultValue="{OIDC:ClientId}" />
</InputClaims>
</TechnicalProfile>
Richtlinie für die vertrauende Seite
In einem technischen Profil der Richtlinie für die vertrauende Seite können Sie die Mandanten-ID oder die Korrelations-ID an die Anwendung der vertrauenden Seite innerhalb des JWT senden.
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="OpenIdConnect" />
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="displayName" />
<OutputClaim ClaimTypeReferenceId="givenName" />
<OutputClaim ClaimTypeReferenceId="surname" />
<OutputClaim ClaimTypeReferenceId="email" />
<OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
<OutputClaim ClaimTypeReferenceId="identityProvider" />
<OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />
<OutputClaim ClaimTypeReferenceId="correlationId" AlwaysUseDefaultValue="true" DefaultValue="{Context:CorrelationId}" />
</OutputClaims>
<SubjectNamingInfo ClaimType="sub" />
</TechnicalProfile>
</RelyingParty>
Nächste Schritte
- Weitere Beispiele für Anspruchskonfliktlöser finden Sie im GitHub-Repository der Azure AD B2C-Community