Partager via


Ajouter des attributs utilisateur et personnaliser l’entrée utilisateur dans Azure Active Directory B2C

Important

À compter du 1er mai 2025, Azure AD B2C ne sera plus disponible pour les nouveaux clients. Pour plus d’informations, consultez notre FAQ.

Avant de commencer, utilisez le sélecteur Choisir un type de stratégie en haut de cette page pour choisir le type de stratégie que vous configurez. Azure Active Directory B2C offre deux possibilités pour définir la façon dont les utilisateurs interagissent avec vos applications : via des flux utilisateurs prédéfinis ou via des stratégies personnalisées entièrement configurables. La procédure donnée dans cet article est différente pour chaque méthode.

Dans cet article, vous collectez un nouvel attribut, tel que la ville, pendant votre parcours d’inscription dans Azure Active Directory B2C (Azure AD B2C). Vous obtenez la ville des utilisateurs, configurez-la en tant que liste déroulante et définissez si elle doit être fournie.

Important

Cet exemple utilise la revendication intégrée « city ». Vous pouvez plutôt choisir l'un des attributs intégrés Azure AD B2C pris en charge ou un attribut personnalisé. Pour utiliser un attribut personnalisé, activez les attributs personnalisés. Pour utiliser un attribut intégré ou personnalisé différent, remplacez « city » par l’attribut de votre choix, par exemple l’attribut intégré jobTitle ou un attribut personnalisé tel que extension_loyaltyId.

Conditions préalables

Ajouter des attributs utilisateur à votre flux utilisateur

  1. Connectez-vous au portail Azure.
  2. Si vous avez accès à plusieurs tenants (locataires), sélectionnez l’icône Paramètres dans le menu supérieur pour basculer vers votre tenant Azure AD B2C à partir du menu Annuaires + abonnements.
  3. Sous Services Azure, sélectionnez Azure AD B2C. Vous pouvez également utiliser la zone de recherche pour rechercher et sélectionner Azure AD B2C.
  4. Dans votre tenant Azure AD B2C, sélectionnez Flux d’utilisateurs.
  5. Sélectionnez votre politique (par exemple, « B2C_1_SignupSignin ») pour l’ouvrir.
  6. Sélectionnez attributs utilisateur , puis sélectionnez l’attribut utilisateur (par exemple, « Ville »).
  7. Cliquez sur Enregistrer.

Fournir des revendications facultatives à votre application

Les revendications d’application sont des valeurs qui sont retournées à l’application. Mettez à jour votre flux utilisateur pour contenir les revendications souhaitées :

  1. Sélectionnez votre politique (par exemple, « B2C_1_SignupSignin ») pour l’ouvrir.
  2. Sélectionnez demandes d'application.
  3. Sélectionnez les attributs que vous souhaitez renvoyer à votre application (par exemple, « Ville »).
  4. Cliquez sur Enregistrer.

Configurer le type d’entrée d’attributs utilisateur

  1. Sélectionnez votre politique (par exemple, « B2C_1_SignupSignin ») pour l’ouvrir.

  2. Sélectionnez Les mises en page.

  3. Sélectionnez la page d’inscription au compte local.

  4. Sous Attributs utilisateur, sélectionnez Ville.

    1. Dans la liste déroulante Facultatif , sélectionnez Non.
    2. Dans le type d’entrée utilisateur, sélectionnez le type d’entrée utilisateur actuel, tel que TextBox, pour ouvrir un volet de fenêtre d’éditeur de type d’entrée utilisateur .
    3. Dans la liste déroulante Type d’entrée utilisateur , sélectionnez DropdownSingleSelect.
    4. Dans le texte et les valeurs, entrez les paires texte et valeur qui composent votre ensemble de réponses pour l’attribut. Le texte s’affiche dans l’interface web de votre flux, et les valeurs sont stockées dans Azure AD B2C pour le texte sélectionné. Facultatif : utilisez les boutons « Monter/descendre » pour réorganiser les éléments déroulants.
  5. Sélectionnez OK. Facultatif : utilisez les boutons « Monter/descendre » pour réorganiser les attributs utilisateur dans la page d’inscription.

  6. Cliquez sur Enregistrer.

    La page web appelle l’API verte.

Fournir une liste de valeurs à l’aide de collections localisées

Pour fournir une liste définie de valeurs pour l’attribut ville :

  1. Activer la personnalisation de la langue sur le flux utilisateur
  2. Sélectionnez votre politique (par exemple, « B2C_1_SignupSignin ») pour l’ouvrir.
  3. Dans la page Langues du flux utilisateur, sélectionnez une langue que vous souhaitez personnaliser.
  4. Sous Fichiers de ressources au niveau de la page, sélectionnez Page d’inscription au compte local.
  5. Sélectionnez Télécharger les valeurs par défaut (ou Téléchargement remplace si vous avez précédemment modifié cette langue).
  6. Créez un LocalizedCollections attribut.

LocalizedCollections est un tableau de paires Name et Value. L’ordre des éléments est l’ordre dans lequel ils sont affichés.

  • ElementId est l’attribut utilisateur auquel cet attribut LocalizedCollections apporte une réponse.
  • Name est la valeur affichée à l’utilisateur.
  • Value est ce qui est renvoyé dans la revendication lorsque cette option est sélectionnée.
{
  "LocalizedStrings": [...],
  "LocalizedCollections": [
    {
      "ElementType": "ClaimType",
      "ElementId": "city",
      "TargetCollection": "Restriction",
      "Override": true,
      "Items": [
        {
          "Name": "Berlin",
          "Value": "Berlin"
        },
        {
          "Name": "London",
          "Value": "London"
        },
        {
          "Name": "Seattle",
          "Value": "Seattle"
        }
      ]
    }
  ]
}

Charger vos modifications

  1. Une fois les modifications de votre fichier JSON terminées, retournez à votre instance B2C.
  2. Sélectionnez Flux d’utilisateurs et votre stratégie (par exemple, « B2C_1_SignupSignin ») pour l’ouvrir.
  3. Sélectionnez Langues.
  4. Sélectionnez la langue dans laquelle vous voulez traduire.
  5. Sous Fichiers de ressources au niveau de la page, sélectionnez page d’inscription au compte local.
  6. Sélectionnez l’icône de dossier et sélectionnez le fichier JSON à charger. Ces changements sont automatiquement enregistrés dans votre flux utilisateur.

Tester votre flux utilisateur

  1. Sélectionnez votre politique (par exemple, « B2C_1_SignupSignin ») pour l’ouvrir.
  2. Pour tester votre stratégie, sélectionnez Exécuter le flux utilisateur.
  3. Pour l’application, sélectionnez l’application web nommée testapp1 que vous avez inscrite précédemment. L’URL de réponse doit être https://jwt.ms.
  4. Sélectionner Exécuter le flux utilisateur

Aperçu

Vous pouvez collecter des données initiales auprès de vos utilisateurs à l’aide du parcours utilisateur d’inscription ou de connexion. Vous pouvez collecter plus de revendications ultérieurement à l’aide d’un parcours utilisateur de modification de profil. Chaque fois qu’Azure AD B2C collecte des informations directement à partir de l’utilisateur de manière interactive, il utilise le profil technique autodéclaré. Dans cet exemple, vous allez :

  1. Définir une revendication « city ».
  2. Demandez à l’utilisateur le nom de sa ville.
  3. Conserver la ville dans le profil utilisateur de l’annuaire Azure AD B2C ;
  4. lire la revendication de ville dans l’annuaire Azure AD B2C à chaque connexion ;
  5. retourner la ville à votre application par partie de confiance après vous être connecté ou inscrit.

Définir une revendication

Une assertion assure le stockage temporaire des données lors de l'exécution d'une stratégie Azure AD B2C. Le schéma de revendications est l’endroit où vous déclarez vos revendications. Les éléments suivants sont utilisés pour définir la revendication :

  • DisplayName : chaîne qui définit l’étiquette orientée utilisateur.
  • DataType : type de la revendication.
  • UserHelpText : aide l’utilisateur à comprendre ce qui est requis.
  • UserInputType : type de contrôle d’entrée, tel que la zone de texte, la sélection de radio, la liste déroulante ou plusieurs sélections.

Ouvrez le fichier d’extensions de votre stratégie. Par exemple : SocialAndLocalAccounts/TrustFrameworkExtensions.xml.

  1. Recherchez l’élément BuildingBlocks . Si l’élément n’existe pas, ajoutez-le.
  2. Recherchez l’élément ClaimsSchema . Si l’élément n’existe pas, ajoutez-le.
  3. Ajoutez la revendication de la ville à l’élément ClaimsSchema.
<!-- 
<BuildingBlocks>
  <ClaimsSchema> -->
    <ClaimType Id="city">
      <DisplayName>City where you work</DisplayName>
      <DataType>string</DataType>
      <UserInputType>DropdownSingleSelect</UserInputType>
      <Restriction>
        <Enumeration Text="Berlin" Value="berlin" />
        <Enumeration Text="London" Value="london" />
        <Enumeration Text="Seattle" Value="seattle" />
      </Restriction>
    </ClaimType>
  <!-- 
  </ClaimsSchema>
</BuildingBlocks>-->

Incluez l’attribut SelectByDefault sur un Enumeration élément pour le rendre sélectionné par défaut lorsque la page se charge pour la première fois. Par exemple, pour pré-sélectionner l’élément londonien , remplacez l’élément Enumeration par l’exemple suivant :

<Restriction>
  <Enumeration Text="Berlin" Value="berlin" />
  <Enumeration Text="London" Value="london" SelectByDefault="true" />
  <Enumeration Text="Seattle" Value="seattle" />
</Restriction>

Ajouter une revendication à l’interface utilisateur

Les profils techniques suivants sont autodéclarés, appelés lorsqu’un utilisateur doit fournir une entrée :

  • LocalAccountSignUpWithLogonEmail - Flux d’inscription de compte local.
  • SelfAsserted-Social - Première connexion d'un utilisateur à un compte fédéré.
  • SelfAsserted-ProfileUpdate - Modifier le flux de profil.

Pour collecter la revendication de ville au cours de l’inscription, celle-ci doit être ajoutée en tant que revendication de sortie au profil technique LocalAccountSignUpWithLogonEmail. Remplacez ce profil technique dans le fichier d’extension. Spécifiez la liste complète des revendications de sortie pour contrôler l’ordre dans lequel les revendications sont présentées à l’écran. Recherchez l’élément ClaimsProviders . Ajoutez un nouveau ClaimsProviders comme suit :

<ClaimsProvider>
  <DisplayName>Local Account</DisplayName>
  <TechnicalProfiles>
    <!--Local account sign-up page-->
    <TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
      <OutputClaims>
       <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="Verified.Email" Required="true" />
       <OutputClaim ClaimTypeReferenceId="newPassword" Required="true" />
       <OutputClaim ClaimTypeReferenceId="reenterPassword" Required="true" />
       <OutputClaim ClaimTypeReferenceId="displayName" />
       <OutputClaim ClaimTypeReferenceId="givenName" />
       <OutputClaim ClaimTypeReferenceId="surName" />
       <OutputClaim ClaimTypeReferenceId="city"/>
     </OutputClaims>
   </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

Pour collecter la revendication de ville après la connexion initiale avec un compte fédéré, celle-ci doit être ajoutée en tant que revendication de sortie au profil technique SelfAsserted-Social. Pour que les utilisateurs de compte local et fédéré puissent modifier leurs données de profil ultérieurement, ajoutez les revendications d’entrée et de sortie au SelfAsserted-ProfileUpdate profil technique. Remplacez ces profils techniques dans le fichier d’extension. Spécifiez la liste complète des revendications de sortie pour contrôler l’ordre dans lequel les revendications sont présentées à l’écran. Recherchez l’élément ClaimsProviders . Ajoutez un nouveau ClaimsProviders comme suit :

<ClaimsProvider>
  <DisplayName>Self Asserted</DisplayName>
  <TechnicalProfiles>
    <!--Federated account first-time sign-in page-->
    <TechnicalProfile Id="SelfAsserted-Social">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="city" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="displayName"/>
        <OutputClaim ClaimTypeReferenceId="givenName"/>
        <OutputClaim ClaimTypeReferenceId="surname"/>
        <OutputClaim ClaimTypeReferenceId="city"/>
      </OutputClaims>
    </TechnicalProfile>
    <!--Edit profile page-->
    <TechnicalProfile Id="SelfAsserted-ProfileUpdate">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="city" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="displayName"/>
        <OutputClaim ClaimTypeReferenceId="givenName" />
        <OutputClaim ClaimTypeReferenceId="surname" />
        <OutputClaim ClaimTypeReferenceId="city"/>
      </OutputClaims>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

Lire et écrire une revendication

Les profils techniques suivants sont des profils techniques Active Directory, qui lisent et écrivent des données dans Microsoft Entra ID.
Permet PersistedClaims d’écrire des données dans le profil utilisateur et OutputClaims de lire des données à partir du profil utilisateur dans les profils techniques Active Directory respectifs.

Remplacez ces profils techniques dans le fichier d’extension. Recherchez l’élément ClaimsProviders . Ajoutez un nouveau ClaimsProviders comme suit :

<ClaimsProvider>
  <DisplayName>Azure Active Directory</DisplayName>
  <TechnicalProfiles>
    <!-- Write data during a local account sign-up flow. -->
    <TechnicalProfile Id="AAD-UserWriteUsingLogonEmail">
      <PersistedClaims>
        <PersistedClaim ClaimTypeReferenceId="city"/>
      </PersistedClaims>
    </TechnicalProfile>
    <!-- Write data during a federated account first-time sign-in flow. -->
    <TechnicalProfile Id="AAD-UserWriteUsingAlternativeSecurityId">
      <PersistedClaims>
        <PersistedClaim ClaimTypeReferenceId="city"/>
      </PersistedClaims>
    </TechnicalProfile>
    <!-- Write data during edit profile flow. -->
    <TechnicalProfile Id="AAD-UserWriteProfileUsingObjectId">
      <PersistedClaims>
        <PersistedClaim ClaimTypeReferenceId="city"/>
      </PersistedClaims>
    </TechnicalProfile>
    <!-- Read data after user resets the password. -->
    <TechnicalProfile Id="AAD-UserReadUsingEmailAddress">
      <OutputClaims>  
        <OutputClaim ClaimTypeReferenceId="city" />
      </OutputClaims>
    </TechnicalProfile>
    <!-- Read data after user authenticates with a local account. -->
    <TechnicalProfile Id="AAD-UserReadUsingObjectId">
      <OutputClaims>  
        <OutputClaim ClaimTypeReferenceId="city" />
      </OutputClaims>
    </TechnicalProfile>
    <!-- Read data after user authenticates with a federated account. -->
    <TechnicalProfile Id="AAD-UserReadUsingAlternativeSecurityId">
      <OutputClaims>  
        <OutputClaim ClaimTypeReferenceId="city" />
      </OutputClaims>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

Inclure une revendication dans le jeton

Pour renvoyer la revendication de la ville à l’application par partie de confiance, ajoutez une revendication de sortie au fichier SocialAndLocalAccounts/SignUpOrSignIn.xml. Après un parcours utilisateur réussi, la revendication de sortie est ajoutée au jeton et envoyée à l’application. Modifiez l’élément de profil technique dans la section de partie de confiance pour ajouter la ville en tant que revendication de sortie.

<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="city" DefaultValue="" />
    </OutputClaims>
    <SubjectNamingInfo ClaimType="sub" />
  </TechnicalProfile>
</RelyingParty>

Charger et tester votre stratégie personnalisée mise à jour

  1. Si vous avez accès à plusieurs tenants (locataires), sélectionnez l’icône Paramètres dans le menu supérieur pour basculer vers votre tenant Azure AD B2C à partir du menu Annuaires + abonnements.
  2. Recherchez et sélectionnez Azure AD B2C.
  3. Sous Stratégies, sélectionnez Identity Experience Framework.
  4. Sélectionnez Charger une stratégie personnalisée.
  5. Chargez les fichiers de stratégie que vous avez modifiés précédemment.

Tester la stratégie personnalisée

  1. Sélectionnez votre stratégie de partie de confiance, par exemple B2C_1A_signup_signin.
  2. Pour l’application, sélectionnez une application web que vous avez inscrite précédemment. L’URL de réponse doit être https://jwt.ms.
  3. Sélectionnez le bouton Exécuter maintenant .
  4. Dans la page d’inscription ou de connexion, sélectionnez S’inscrire maintenant pour vous inscrire. Terminez l’entrée des informations utilisateur, y compris le nom de la ville, puis sélectionnez Créer. Vous devriez voir le contenu du jeton qui a été renvoyé.

L’écran d’inscription doit ressembler à la capture d’écran suivante :

Capture d’écran de l’option d’inscription modifiée

Le jeton renvoyé à votre application inclut l'assertion city.

{
  "typ": "JWT",
  "alg": "RS256",
  "kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
}.{
  "exp": 1583500140,
  "nbf": 1583496540,
  "ver": "1.0",
  "iss": "https://contoso.b2clogin.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0/",
  "aud": "00001111-aaaa-2222-bbbb-3333cccc4444",
  "acr": "b2c_1a_signup_signin",
  "nonce": "defaultNonce",
  "iat": 1583496540,
  "auth_time": 1583496540,
  "name": "Emily Smith",
  "email": "joe@outlook.com",
  "given_name": "Emily",
  "family_name": "Smith",
  "city": "Berlin"
  ...
}

[Facultatif] Localiser l’interface utilisateur

Azure AD B2C vous permet de prendre en charge votre stratégie dans différentes langues. Pour plus d’informations, découvrez comment personnaliser l’expérience linguistique. Pour localiser la page d’inscription, configurez la liste des langues prises en charge et fournissez des étiquettes spécifiques à la langue.

Remarque

Lorsque vous utilisez les LocalizedCollection balises spécifiques à la langue, vous pouvez supprimer la Restriction collection de la définition de réclamation.

L’exemple suivant montre comment fournir la liste des villes pour l’anglais et l’espagnol. La collection Restriction de la revendication city est définie avec une liste d’éléments pour l’anglais et l’espagnol. SelectByDefault sélectionne un élément par défaut lorsque la page se charge pour la première fois.

<!-- 
<BuildingBlocks>-->
  <Localization Enabled="true">
    <SupportedLanguages DefaultLanguage="en" MergeBehavior="Append">
      <SupportedLanguage>en</SupportedLanguage>
      <SupportedLanguage>es</SupportedLanguage>
    </SupportedLanguages>
    <LocalizedResources Id="api.localaccountsignup.en">
      <LocalizedCollections>
        <LocalizedCollection ElementType="ClaimType" ElementId="city" TargetCollection="Restriction">
          <Item Text="Berlin" Value="Berlin"></Item>
          <Item Text="London" Value="London" SelectByDefault="true"></Item>
          <Item Text="Seattle" Value="Seattle"></Item>
        </LocalizedCollection>
      </LocalizedCollections>
    </LocalizedResources>
    <LocalizedResources Id="api.localaccountsignup.es">
      <LocalizedCollections>
        <LocalizedCollection ElementType="ClaimType" ElementId="city" TargetCollection="Restriction">
          <Item Text="Berlina" Value="Berlin"></Item>
          <Item Text="Londres" Value="London" SelectByDefault="true"></Item>
          <Item Text="Seattle" Value="Seattle"></Item>
        </LocalizedCollection>
      </LocalizedCollections>
    </LocalizedResources>
  </Localization>
<!-- 
</BuildingBlocks>-->

Après avoir ajouté l’élément de localisation, modifiez la définition de contenu avec la localisation. Dans l’exemple suivant, les ressources localisées en anglais (en) et espagnol (es) personnalisées sont ajoutées à la page d’inscription :

<!-- 
<BuildingBlocks>
  <ContentDefinitions> -->
   <ContentDefinition Id="api.localaccountsignup">
    <LocalizedResourcesReferences MergeBehavior="Prepend">
        <LocalizedResourcesReference Language="en" LocalizedResourcesReferenceId="api.localaccountsignup.en" />
        <LocalizedResourcesReference Language="es" LocalizedResourcesReferenceId="api.localaccountsignup.es" />
    </LocalizedResourcesReferences>
   </ContentDefinition>
  <!-- 
  </ContentDefinitions>
</BuildingBlocks>-->

Étapes suivantes