Définir un profil technique Microsoft Entra dans une stratégie personnalisée Azure Active Directory B2C

Remarque

Dans Active Directory B2C, les stratégies personnalisées sont principalement conçues pour gérer des scénarios complexes. Pour la plupart des scénarios, nous vous recommandons de recourir à des flux d’utilisateurs intégrés. Si vous ne l’avez pas fait, découvrez le Pack de démarrage de stratégie personnalisée dans Prise en main des stratégies personnalisées dans Active Directory B2C.

Azure Active Directory B2C (Azure AD B2C) prend en charge la gestion des utilisateurs Microsoft Entra. Cet article décrit les caractéristiques d’un profil technique permettant d’interagir avec un fournisseur de revendications qui prend en charge ce protocole normalisé.

Protocol

L’attribut Name de l’élément Protocol doit être défini sur Proprietary. L’attribut handler doit contenir le nom complet de l’assembly du gestionnaire de protocoleWeb.TPEngine.Providers.AzureActiveDirectoryProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.

Faisant suite au pack de démarrage de stratégie personnalisée, les profils techniques Microsoft Entra incluent le profil technique AAD-Common. Les profils techniques Microsoft Entra ne spécifient pas le protocole parce que celui-ci est configuré dans le profil technique AAD-Common :

  • AAD-UserReadUsingAlternativeSecurityId et UserReadUsingAlternativeSecurityId-AAD-NoError : rechercher un compte de réseau social dans le répertoire.
  • AAD-UserWriteUsingAlternativeSecurityId : créer un compte de réseau social.
  • AAD-UserReadUsingEmailAddress : rechercher un compte local dans le répertoire.
  • AAD-UserWriteUsingLogonEmail : créer un compte local.
  • AAD-UserWritePasswordUsingObjectId : mettre à jour un mot de passe de compte local.
  • AAD-UserWriteProfileUsingObjectId : mettre à jour un profil utilisateur d’un compte local ou social.
  • AAD-UserReadUsingObjectId : lire un profil utilisateur d’un compte local ou social.
  • AAD-UserWritePhoneNumberUsingObjectId : écrire le numéro de téléphone d’authentification multifacteur d’un compte local ou social.

L’exemple suivant montre le profil technique AAD-Common :

<TechnicalProfile Id="AAD-Common">
  <DisplayName>Azure Active Directory</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.AzureActiveDirectoryProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />

  <CryptographicKeys>
    <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
  </CryptographicKeys>

  <!-- We need this here to suppress the SelfAsserted provider from invoking SSO on validation profiles. -->
  <IncludeInSso>false</IncludeInSso>
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

InputClaims

L’élément InputClaims contient une revendication qui est utilisée pour rechercher un compte dans l’annuaire, ou pour en créer un. Il doit y avoir exactement un élément InputClaim dans la collection de revendications d’entrée pour tous les profils techniques Microsoft Entra. Il se peut que vous deviez mapper le nom de la revendication définie dans votre stratégie au nom défini dans Microsoft Entra ID.

Pour lire, mettre à jour ou supprimer un compte d’utilisateur existant, la revendication d’entrée est une clé qui identifie de façon unique le compte dans l’annuaire Microsoft Entra. Par exemple, objectId, userPrincipalName, signInNames.emailAddress, signInNames.userName ou alternativeSecurityId.

Pour créer un compte d’utilisateur, la revendication d’entrée est une clé qui identifie de façon unique un compte local ou fédéré. Par exemple, un compte local : signInNames.emailAddress ou signInNames.userName. Pour un compte fédéré : alternativeSecurityId.

L’élément InputClaimsTransformations peut contenir une collection d’éléments de transformation de revendications d’entrée qui sont utilisés pour modifier la revendication d’entrée ou en générer une nouvelle.

OutputClaims

L’élément OutputClaims contient une liste de revendications retournées par le profil technique Microsoft Entra. Il se peut que vous deviez mapper le nom de la revendication définie dans votre stratégie au nom défini dans Microsoft Entra ID. Vous pouvez également inclure des revendications qui ne sont pas renvoyées par Microsoft Entra ID, pour autant que vous définissiez l’attribut DefaultValue.

L’élément OutputClaimsTransformations peut contenir une collection d’éléments OutputClaimsTransformation qui sont utilisés pour modifier les revendications de sortie ou en générer de nouvelles.

Par exemple, le profil technique AAD-UserWriteUsingLogonEmail crée un compte local et retourne les revendications suivantes :

  • objectId, qui est l’identificateur du nouveau compte
  • newUser, qui indique si l’utilisateur est nouveau
  • authenticationSource, qui définit l’authentification sur localAccountAuthentication
  • userPrincipalName, qui est le nom d’utilisateur principal du nouveau compte
  • signInNames.emailAddress, qui est le nom de connexion du compte, similaire à la revendication d’entrée email
<OutputClaims>
  <OutputClaim ClaimTypeReferenceId="objectId" />
  <OutputClaim ClaimTypeReferenceId="newUser" PartnerClaimType="newClaimsPrincipalCreated" />
  <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" />
  <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
  <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" />
</OutputClaims>

PersistedClaims

L’élément PersistedClaims contient toutes les valeurs qui doivent être rendues persistantes par Microsoft Entra ID, avec des informations de mappage possible entre un type de revendication déjà défini dans la section ClaimsSchema de la stratégie et le nom de l’attribut Microsoft Entra.

Le profil technique AAD-UserWriteUsingLogonEmail, qui crée un nouveau compte local, conserve les revendications suivantes :

  <PersistedClaims>
    <!-- Required claims -->
    <PersistedClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" />
    <PersistedClaim ClaimTypeReferenceId="newPassword" PartnerClaimType="password"/>
    <PersistedClaim ClaimTypeReferenceId="displayName" DefaultValue="unknown" />
    <PersistedClaim ClaimTypeReferenceId="passwordPolicies" DefaultValue="DisablePasswordExpiration" />

    <!-- Optional claims. -->
    <PersistedClaim ClaimTypeReferenceId="givenName" />
    <PersistedClaim ClaimTypeReferenceId="surname" />
  </PersistedClaims>

Le nom de la revendication est le nom de l’attribut Microsoft Entra, sauf si l’attribut PartnerClaimType est spécifié, qui contient le nom d’attribut Microsoft Entra.

Exigences d’une opération

  • Il doit y avoir exactement un élément InputClaim dans le panier de revendications pour tous les profils techniques Microsoft Entra.
  • L’article sur les attributs de profil utilisateur décrit les attributs de profil utilisateur Azure AD B2C pris en charge que vous pouvez utiliser dans les revendications d’entrée, les revendications de sortie et les revendications persistantes.
  • Si l’opération est Write ou DeleteClaims, il doit également apparaître dans un élément PersistedClaims.
  • La valeur de la revendication userPrincipalName doit être au format user@tenant.onmicrosoft.com.
  • La revendication displayName est obligatoire et ne peut pas être une chaîne vide.

Opérations de profil technique Microsoft Entra

Lire

L’opération Read lit les données sur un seul compte d’utilisateur. Le profil technique suivant lit les données d’un compte d’utilisateur à l’aide de l’objectId de l’utilisateur :

<TechnicalProfile Id="AAD-UserReadUsingObjectId">
  <Metadata>
    <Item Key="Operation">Read</Item>
    <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item>
  </Metadata>
  <IncludeInSso>false</IncludeInSso>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="objectId" Required="true" />
  </InputClaims>
  <OutputClaims>

    <!-- Required claims -->
    <OutputClaim ClaimTypeReferenceId="strongAuthenticationPhoneNumber" />

    <!-- Optional claims -->
    <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" />
    <OutputClaim ClaimTypeReferenceId="displayName" />
    <OutputClaim ClaimTypeReferenceId="otherMails" />
    <OutputClaim ClaimTypeReferenceId="givenName" />
    <OutputClaim ClaimTypeReferenceId="surname" />
  </OutputClaims>
  <IncludeTechnicalProfile ReferenceId="AAD-Common" />
</TechnicalProfile>

Write

L’opération Write crée ou met à jour un seul compte d’utilisateur. Le profil technique suivant crée un compte de réseau social :

<TechnicalProfile Id="AAD-UserWriteUsingAlternativeSecurityId">
  <Metadata>
    <Item Key="Operation">Write</Item>
    <Item Key="RaiseErrorIfClaimsPrincipalAlreadyExists">true</Item>
    <Item Key="UserMessageIfClaimsPrincipalAlreadyExists">You are already registered, please press the back button and sign in instead.</Item>
  </Metadata>
  <IncludeInSso>false</IncludeInSso>
  <InputClaimsTransformations>
    <InputClaimsTransformation ReferenceId="CreateOtherMailsFromEmail" />
  </InputClaimsTransformations>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="AlternativeSecurityId" PartnerClaimType="alternativeSecurityId" Required="true" />
  </InputClaims>
  <PersistedClaims>
    <!-- Required claims -->
    <PersistedClaim ClaimTypeReferenceId="alternativeSecurityId" />
    <PersistedClaim ClaimTypeReferenceId="userPrincipalName" />
    <PersistedClaim ClaimTypeReferenceId="mailNickName" DefaultValue="unknown" />
    <PersistedClaim ClaimTypeReferenceId="displayName" DefaultValue="unknown" />

    <!-- Optional claims -->
    <PersistedClaim ClaimTypeReferenceId="otherMails" />
    <PersistedClaim ClaimTypeReferenceId="givenName" />
    <PersistedClaim ClaimTypeReferenceId="surname" />
  </PersistedClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="objectId" />
    <OutputClaim ClaimTypeReferenceId="newUser" PartnerClaimType="newClaimsPrincipalCreated" />
    <OutputClaim ClaimTypeReferenceId="otherMails" />
  </OutputClaims>
  <IncludeTechnicalProfile ReferenceId="AAD-Common" />
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
</TechnicalProfile>

DeleteClaims

L’opération DeleteClaims efface les informations d’une liste fournie de revendications. Le profil technique suivant supprime les revendications :

<TechnicalProfile Id="AAD-DeleteClaimsUsingObjectId">
  <Metadata>
    <Item Key="Operation">DeleteClaims</Item>
  </Metadata>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="objectId" Required="true" />
  </InputClaims>
  <PersistedClaims>
    <PersistedClaim ClaimTypeReferenceId="objectId" />
    <PersistedClaim ClaimTypeReferenceId="Verified.strongAuthenticationPhoneNumber" PartnerClaimType="strongAuthenticationPhoneNumber" />
  </PersistedClaims>
  <OutputClaims />
  <IncludeTechnicalProfile ReferenceId="AAD-Common" />
</TechnicalProfile>

DeleteClaimsPrincipal

L’opération DeleteClaimsPrincipal supprime un seul compte d’utilisateur de l’annuaire. Le profil technique suivant supprime un compte d’utilisateur du répertoire en utilisant le nom d’utilisateur principal :

<TechnicalProfile Id="AAD-DeleteUserUsingObjectId">
  <Metadata>
    <Item Key="Operation">DeleteClaimsPrincipal</Item>
  </Metadata>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="objectId" Required="true" />
  </InputClaims>
  <OutputClaims/>
  <IncludeTechnicalProfile ReferenceId="AAD-Common" />
</TechnicalProfile>

Le profil technique suivant supprime un compte d’utilisateur social en utilisant alternativeSecurityId :

<TechnicalProfile Id="AAD-DeleteUserUsingAlternativeSecurityId">
  <Metadata>
    <Item Key="Operation">DeleteClaimsPrincipal</Item>
  </Metadata>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="alternativeSecurityId" Required="true" />
  </InputClaims>
  <OutputClaims/>
  <IncludeTechnicalProfile ReferenceId="AAD-Common" />
</TechnicalProfile>

Métadonnées

Attribut Obligatoire Description
Opération Oui Opération à effectuer. Valeurs possibles : Read, Write, DeleteClaims ou DeleteClaimsPrincipal.
RaiseErrorIfClaimsPrincipalDoesNotExist Non Génère une erreur si l’objet utilisateur n’existe pas dans le répertoire. Valeurs possibles : true ou false.
RaiseErrorIfClaimsPrincipalAlreadyExists Non Génère une erreur si l’objet utilisateur existe déjà. Valeurs possibles : true ou false. Ces métadonnées s’appliquent uniquement à l’opération d’écriture.
ApplicationObjectId Non Identificateur d’objet d’application pour les attributs d’extension. Valeur : ObjectId d'une application. Pour plus d’informations, consultez Utiliser des attributs personnalisés.
ClientId Non Identificateur client pour accéder au locataire en tant que tiers. Pour plus d’informations, voir Utiliser des attributs personnalisés dans une stratégie personnalisée de modification de profil.
IncludeClaimResolvingInClaimsHandling Non Pour les revendications d’entrée et de sortie, spécifie si la résolution des revendications est incluse dans le profil technique. Valeurs possibles : true ou false (par défaut). Si vous souhaitez utiliser un programme de résolution des revendications dans le profil technique, définissez cette valeur sur true.

Éléments d’interface utilisateur

Les paramètres suivants peuvent être utilisés pour configurer le message d’erreur affiché en cas d’échec. Les métadonnées doivent être configurées dans le profil technique autodéclaré. Les messages d’erreur peuvent être localisés.

Attribut Obligatoire Description
UserMessageIfClaimsPrincipalAlreadyExists Non Si une erreur doit être déclenchée (voir la description de l’attribut RaiseErrorIfClaimsPrincipalAlreadyExists), spécifiez le message à afficher à l’utilisateur si l’objet utilisateur existe déjà.
UserMessageIfClaimsPrincipalDoesNotExist Non Si une erreur doit être déclenchée (voir la description de l’attribut RaiseErrorIfClaimsPrincipalDoesNotExist), spécifiez le message à afficher à l’utilisateur si l’objet utilisateur n’existe pas.

Étapes suivantes

Consultez l’article suivant pour obtenir un exemple d’utilisation d’un profil technique Microsoft Entra :