À propos des résolveurs de revendication dans les stratégies personnalisées d’Azure Active Directory B2C

Les résolveurs de revendication dans les stratégies personnalisées d’Azure Active Directory B2C (Azure AD B2C) fournissent des informations de contexte sur une demande d’autorisation, telles que le nom de la stratégie, l’ID de corrélation de la demande ou la langue de l’interface utilisateur, entre autres.

Pour utiliser un résolveur de revendication dans une revendication d’entrée ou de sortie, vous définissez une chaîne ClaimType sous l’élément ClaimsSchema, puis vous définissez DefaultValue sur le résolveur de revendication dans l’élément de la revendication d’entrée ou de sortie. Azure AD B2C lit la valeur du résolveur de revendication, puis l’utilise dans le profil technique.

Dans l’exemple suivant, un type de revendication nommé correlationId est défini avec un DataType de string.

<ClaimType Id="correlationId">
  <DisplayName>correlationId</DisplayName>
  <DataType>string</DataType>
  <UserHelpText>Request correlation Id</UserHelpText>
</ClaimType>

Dans le profil technique, mappez le résolveur de revendication au type de revendication. Azure AD B2C renseigne la valeur du résolveur de revendication {Context:CorrelationId} dans la revendication correlationId et envoie la demande au profil technique.

<InputClaim ClaimTypeReferenceId="correlationId" DefaultValue="{Context:CorrelationId}" />

Culture

Le tableau suivant répertorie les programmes de résolution de revendication avec des informations sur la langue utilisée dans la demande d’autorisation :

Revendication Description Exemple
{Culture:LanguageName} Code ISO à deux lettres pour la langue. en
{Culture:LCID} LCID du code de langue 1033
{Culture:RegionName} Code ISO à deux lettres pour la région. US
{Culture:RFC5646} Code de langue RFC5646. fr-FR

Découvrez la démonstration en direct des résolveurs de revendications de culture.

Stratégie

Le tableau suivant répertorie les programmes de résolution de revendication avec des informations sur la stratégie utilisée dans la demande d’autorisation :

Revendication Description Exemple
{Policy:PolicyId} Nom de la stratégie de partie de confiance. B2C_1A_signup_signin
{Policy:RelyingPartyTenantId} ID de locataire de la stratégie de partie de confiance. votre-locataire.onmicrosoft.com
{Policy:TenantObjectId} ID d’objet de locataire de la stratégie de partie de confiance. 00000000-0000-0000-0000-000000000000
{Policy:TrustFrameworkTenantId} ID de locataire de l’infrastructure de confiance. votre-locataire.onmicrosoft.com

Découvrez la démonstration en direct des résolveurs de revendications de stratégie.

Context

Le tableau suivant répertorie les programmes de résolution de revendication contextuels de la demande d’autorisation :

Revendication Description Exemple
{Context:BuildNumber} Version de l’infrastructure d’expérience d’identité (numéro de build). 1.0.507.0
{Context:CorrelationId} L’ID de corrélation. 00000000-0000-0000-0000-000000000000
{Context:DateTimeInUtc} Date et heure UTC. 10/10/2021 12:00:00 PM
{Context:DeploymentMode} Mode de déploiement de la stratégie. Production
{Context:HostName} Nom d’hôte de la requête actuelle. contoso.b2clogin.com
{Context:IPAddress} Adresse IP utilisateur. 11.111.111.11
{Context:KMSI} Indique si la case Maintenir la connexion est cochée. true

Découvrez la démonstration en direct des résolveurs de revendications de contexte.

Revendications

Cette section décrit comment obtenir une valeur de revendication en tant que programme de résolution de revendication.

Revendication Description Exemple
{Claim:claim type} Identificateur d’un type de revendication déjà défini dans la section ClaimsSchema du fichier de stratégie ou d’un fichier de stratégie parent. Par exemple : {Claim:displayName} ou {Claim:objectId}. Valeur du type de revendication.

OpenID Connect

Le tableau suivant répertorie les programmes de résolution de revendication avec des informations sur la demande d’autorisation OpenID Connect :

Revendication Description Exemple
{OIDC:AuthenticationContextReferences} Paramètre de chaîne de requête acr_values. N/A
{OIDC:ClientId} Paramètre de chaîne de requête client_id. 00000000-0000-0000-0000-000000000000
{OIDC:DomainHint} Paramètre de chaîne de requête domain_hint. facebook.com
{OIDC:LoginHint} Paramètre de chaîne de requête login_hint. someone@contoso.com
{OIDC:MaxAge} Le max_age. N/A
{OIDC:Nonce} Paramètre de chaîne de requête Nonce. defaultNonce
{OIDC:Password} Mot de passe utilisateur du flux des informations d’identification par mot de passe du propriétaire de ressource. password1
{OIDC:Prompt} Paramètre de chaîne de requête prompt. login
{OIDC:RedirectUri} Paramètre de chaîne de requête redirect_uri. https://jwt.ms
{OIDC:Resource} Paramètre de chaîne de requête resource. N/A
{OIDC:Scope} Paramètre de chaîne de requête scope. openid
{OIDC:Username} Nom d’utilisateur de l’utilisateur du flux des informations d’identification par mot de passe du propriétaire de ressource. emily@contoso.com
{OIDC :IdToken} Paramètre de chaîne de requête id token. S/O

Découvrez la démonstration en direct des résolveurs de revendications OpenID Connect.

Paramètres clé-valeur OAuth2

Tous les noms de paramètre inclus dans le cadre d’une requête OIDC ou OAuth2 peuvent être mappés à une revendication dans le parcours utilisateur. Par exemple, la demande de l’application peut inclure un paramètre de chaîne de requête avec le nom app_session, loyalty_number ou toute chaîne de requête personnalisée.

Revendication Description Exemple
{OAUTH-KV:campaignId} Paramètre de chaîne de requête. Hawaii
{OAUTH-KV:app_session} Paramètre de chaîne de requête. A3C5R
{OAUTH-KV:loyalty_number} Paramètre de chaîne de requête. 1234
{OAUTH-KV : n’importe quelle chaîne de requête personnalisée} Paramètre de chaîne de requête. S/O

Paramètres clé-valeur SAML

Dans une demande d’authentification SAML, tout nom de paramètre inclus dans la requête, mais qui n’est pas spécifique au protocole (par exemple, SAMLRequest) peut être mappé à une revendication dans le parcours utilisateur. Par exemple, la requête peut inclure un paramètre personnalisé tel que username. Cela s’applique aux requêtes SAML initiées par le fournisseur de services et initiées par le fournisseur d’identité.

Réclamation Description Exemple
{SAML-KV :username} Chaîne de requête ou paramètre de corps POST. username@domain.com
{SAML-KV :loyalty_number} Chaîne de requête ou paramètre de corps POST. 1234
{SAML-KV :any custom query string} Chaîne de requête ou paramètre de corps POST. S/O

SAML

Le tableau suivant répertorie les programmes de résolution de revendication avec des informations sur la demande d’autorisation SAML :

Revendication Description Exemple
{SAML:AuthnContextClassReferences} Valeur de l'élément AuthnContextClassRef, provenant de la demande SAML. urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
{SAML:NameIdPolicyFormat} Attribut Format, provenant de l'élément NameIDPolicy de la demande SAML. urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
{SAML:Issuer} Valeur de l'élément Issuer SAML de la demande SAML. https://contoso.com
{SAML:AllowCreate} Valeur de l'attribut AllowCreate, provenant de l'élément NameIDPolicy de la demande SAML. True
{SAML:ForceAuthn} Valeur de l'attribut ForceAuthN, provenant de l'élément AuthnRequest de la demande SAML. True
{SAML:ProviderName} Valeur de l'attribut ProviderName, provenant de l'élément AuthnRequest de la demande SAML. Contoso.com
{SAML:RelayState} Paramètre de chaîne de requête RelayState.
{SAML:Subject} Subject de l’élément NameId de la demande SAML AuthN.
{SAML:Binding} Valeur de l'attribut ProtocolBinding, provenant de l'élément AuthnRequest de la demande SAML. urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST

Découvrez la démonstration en direct des résolveurs de revendications SAML.

Fournisseur d’identité OAuth2

Le tableau suivant répertorie les programmes de résolution de revendication du fournisseur d’identité OAuth2 :

Revendication Description Exemple
{oauth2:access_token} Jeton d’accès au fournisseur d’identité OAuth2. Attribut access_token. eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1Ni...
{oauth2:token_type} Type du jeton d’accès. Attribut token_type. Porteur
{oauth2:expires_in} La durée de validité du jeton d’accès access_token en secondes. Attribut expires_in. Le DataType de la revendication de sortie doit être int ou long. 960000
{oauth2:refresh_token} Jeton d’actualisation du fournisseur d’identité OAuth2. Attribut refresh_token. eyJraWQiOiJacW9pQlp2TW5pYVc2MUY...

Pour utiliser les programmes de résolution de revendication de fournisseur d’identité OAuth2, définissez l’attribut PartnerClaimType de la revendication de sortie sur le programme de résolution de revendication. L’exemple suivant montre comment obtenir les revendications du fournisseur d’identité externe :

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

Utilisation de programmes de résolution de revendications

Vous pouvez utiliser des programmes de résolution de revendications avec les éléments suivants :

Élément Élément Paramètres
Profil technique Application Insights InputClaim
Profil technique Microsoft Entra InputClaim, OutputClaim 1, 2
Profil technique OAuth2 InputClaim, OutputClaim 1, 2
Profil technique OpenID Connect InputClaim, OutputClaim 1, 2
Profil technique de transformation de revendications InputClaim, OutputClaim 1, 2
Profil technique du fournisseur RESTful InputClaim 1, 2
Profil technique du fournisseur d’identité SAML OutputClaim 1, 2
Profil technique Autodéclaré InputClaim, OutputClaim 1, 2
ContentDefinition LoadUri
ContentDefinitionParameters Parameter
Profil technique RelyingParty OutputClaim 2

Paramètres :

  1. Les métadonnées IncludeClaimResolvingInClaimsHandling doivent être définies sur true.
  2. L'attribut des revendications d'entrée ou de sortie AlwaysUseDefaultValue doit être défini sur true.

Exemples de programmes de résolution de revendications

Profil technique RESTful

Dans un profil technique RESTful, vous pouvez envoyer la langue de l’utilisateur, le nom de la stratégie, l’étendue et l’ID client. Selon ces revendications, l’API REST peut exécuter une logique métier personnalisée et éventuellement déclencher un message d’erreur localisé.

L'exemple suivant illustre un profil technique RESTful en lien avec ce scénario :

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

Connexion directe

À l’aide de résolveurs de revendication, vous pouvez préremplir le nom de connexion ou diriger la connexion vers un fournisseur d’identité sociale spécifique, comme Facebook, LinkedIn ou un compte Microsoft. Pour plus d’informations, consultez Configurer la connexion directe avec Azure Active Directory B2C.

Personnalisation dynamique de l’interface utilisateur

Azure AD B2C vous permet de transmettre des paramètres de chaîne de requête à vos points de terminaison de définition de contenu HTML afin d'afficher dynamiquement le contenu de la page. Par exemple, cette fonctionnalité permet de changer l’image d’arrière-plan sur la page de connexion ou d’inscription Azure AD B2C en fonction d’un paramètre personnalisé que vous transmettez depuis votre application web ou mobile. Pour plus d’informations, consultez Configurer dynamiquement l’interface utilisateur à l’aide de stratégies personnalisées dans Azure Active Directory B2C. Vous pouvez également localiser votre page HTML en fonction d’un paramètre de langue ou changer le contenu selon l’ID client.

L'exemple suivant transmet dans la chaîne de requête les paramètres campaignId (valeur Hawaii), language (valeur en-US), et app (représentant l'ID client) :

<UserJourneyBehaviors>
  <ContentDefinitionParameters>
    <Parameter Name="campaignId">{OAUTH-KV:campaignId}</Parameter>
    <Parameter Name="language">{Culture:RFC5646}</Parameter>
    <Parameter Name="app">{OIDC:ClientId}</Parameter>
  </ContentDefinitionParameters>
</UserJourneyBehaviors>

Ainsi, Azure AD B2C envoie les paramètres ci-dessus à la page de contenu HTML :

/selfAsserted.aspx?campaignId=hawaii&language=en-US&app=0239a9cc-309c-4d41-87f1-31288feb2e82

Définition de contenu

Une définition de contenu (ContentDefinitionLoadUri) vous permet d’envoyer des programmes de résolution de revendications pour extraire du contenu à partir de différents emplacements, conformément aux paramètres utilisés.

<ContentDefinition Id="api.signuporsignin">
  <LoadUri>https://contoso.blob.core.windows.net/{Culture:LanguageName}/myHTML/unified.html</LoadUri>
  ...
</ContentDefinition>

Profil technique Application Insights

Avec Azure Application Insights et les résolveurs de revendication, vous pouvez obtenir des insights sur le comportement de l’utilisateur. Dans le profil technique Application Insights, vous envoyez des revendications d’entrée qui sont conservées dans Azure Application Insights. Pour plus d’informations, consultez Suivre le comportement des utilisateurs dans les parcours Azure AD B2C à l’aide d’Application Insights. L’exemple suivant envoie l’ID de stratégie, l’ID de corrélation, la langue et l’ID client à Azure Application Insights.

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

Stratégie de partie de confiance

Le profil technique d'une stratégie Partie de confiance vous permet d'envoyer l'ID du locataire ou l'ID de corrélation à l'application par partie de confiance dans le jeton JWT.

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

Étapes suivantes