Suivre le comportement des utilisateurs dans Azure AD B2C à l’aide d’Application Insights

Avant de commencer, utilisez le sélecteur Choisir un type de stratégie 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.

Cette fonctionnalité est disponible uniquement pour les stratégies personnalisées. Pour accéder aux étapes de configuration, sélectionnez Stratégie personnalisée dans le sélecteur précédent.

Azure Active Directory B2C (Azure AD B2C) vous permet d’envoyer des données d’événement directement à Application Insights à l’aide de la clé d’instrumentation fournie à Azure AD B2C. Avec un profil technique Application Insights, vous pouvez obtenir des journaux des événements détaillés et personnalisés pour vos parcours utilisateur :

  • Obtenir des informations détaillées sur le comportement des utilisateurs
  • Résoudre les problèmes de vos propres stratégies en développement ou en production
  • Mesurer les performances
  • Créer des notifications à partir d’Application Insights

Vue d’ensemble

Pour activer les journaux des événements personnalisés, ajoutez un profil technique Application Insights. Dans le profil technique, vous définissez la clé d’instrumentation Application Insights, le nom de l’événement et les revendications à enregistrer. Pour publier un événement, ajoutez le profil technique comme étape d’orchestration dans un parcours utilisateur.

Quand vous utilisez Application Insights, tenez compte des éléments suivants :

  • Il y a un court délai, généralement inférieur à cinq minutes, avant que de nouveaux journaux soient disponibles dans Application Insights.
  • Azure AD B2C vous permet de choisir les revendications à enregistrer. N’incluez pas de revendications contenant des données personnelles.
  • Pour enregistrer une session utilisateur, vous pouvez utiliser un ID de corrélation afin d’unifier les événements.
  • Appelez le profil technique Application Insights directement à partir d’un parcours utilisateur ou d’un sous-parcours. N’utilisez pas un profil technique Application Insights comme profil technique de validation.

Prérequis

Création d’une ressource Application Insights dans Azure

Quand vous utilisez Application Insights avec Azure AD B2C, vous devez uniquement créer une ressource et obtenir la clé d’instrumentation. Pour plus d’informations, consultez Création d’une ressource Application Insights dans Azure.

  1. Connectez-vous au portail Azure.
  2. Vérifiez que vous utilisez le répertoire qui contient votre abonnement Azure AD, et non votre répertoire Azure AD B2C. Sélectionnez l’icône Répertoires + abonnements dans la barre d’outils du portail.
  3. Sur la page Paramètres du portail | Répertoires + abonnements, recherchez le répertoire Azure AD qui contient votre abonnement dans la liste Nom de répertoire, puis sélectionnez Basculer
  4. Choisissez Créer une ressource dans le coin supérieur gauche du portail Azure, puis recherchez et sélectionnez Application Insights.
  5. Sélectionnez Create (Créer).
  6. Sous Nom, entrez un nom pour la ressource.
  7. Pour Type d’application, sélectionnez Application web ASP.NET.
  8. Pour Groupe de ressources, sélectionnez un groupe existant ou entrez un nom pour un nouveau groupe.
  9. Sélectionnez Create (Créer).
  10. Ouvrez la nouvelle ressource Application Insights, développez Éléments principaux, puis copiez la clé d’instrumentation.

Screenshot that shows the Instrumentation Key on the Application Insights Overview tab.

Définir des revendications

Une revendication fournit un stockage temporaire de données lors d’une exécution de stratégie Azure AD B2C. Vous déclarez vos revendications dans l’élément ClaimsSchema.

  1. Ouvrez le fichier d’extensions de votre stratégie. Le fichier peut se présenter ainsi : SocialAndLocalAccounts/TrustFrameworkExtensions.xml .

  2. Recherchez l’élément BuildingBlocks. Si vous ne le voyez pas, ajoutez-le.

  3. Recherchez l’élément ClaimsSchema. Si vous ne le voyez pas, ajoutez-le.

  4. Ajoutez les revendications suivantes à l’élément ClaimsSchema :

    <ClaimType Id="EventType">
      <DisplayName>Event type</DisplayName>
      <DataType>string</DataType>
    </ClaimType>
    <ClaimType Id="EventTimestamp">
      <DisplayName>Event timestamp</DisplayName>
      <DataType>string</DataType>
    </ClaimType>
    <ClaimType Id="PolicyId">
      <DisplayName>Policy Id</DisplayName>
      <DataType>string</DataType>
    </ClaimType>
    <ClaimType Id="Culture">
      <DisplayName>Culture ID</DisplayName>
      <DataType>string</DataType>
    </ClaimType>
    <ClaimType Id="CorrelationId">
      <DisplayName>Correlation Id</DisplayName>
      <DataType>string</DataType>
    </ClaimType>
    <ClaimType Id="federatedUser">
      <DisplayName>Federated user</DisplayName>
      <DataType>boolean</DataType>
    </ClaimType>
    <ClaimType Id="parsedDomain">
      <DisplayName>Domain name</DisplayName>
      <DataType>string</DataType>
      <UserHelpText>The domain portion of the email address.</UserHelpText>
    </ClaimType>
    <ClaimType Id="userInLocalDirectory">
      <DisplayName>userInLocalDirectory</DisplayName>
      <DataType>boolean</DataType>
    </ClaimType>
    

Ajouter de nouveaux profils techniques

Les profils techniques peuvent être considérés comme des fonctions dans la stratégie personnalisée. Ces fonctions utilisent l’approche d’inclusion du profil technique : un profil technique inclut un autre profil technique et modifie les paramètres ou ajoute de nouvelles fonctionnalités. Le tableau ci-après définit les profils techniques qui servent à ouvrir une session et à publier des événements.

Profil technique Tâche
AppInsights-Common Profil technique commun avec une configuration type. Il inclut la clé d’instrumentation Application Insights, la collection de revendications à enregistrer et le mode développeur. Les autres profils techniques incluent le profil technique commun et ajoutent d’autres revendications comme le nom de l’événement.
AppInsights-SignInRequest Enregistre un événement SignInRequest avec un ensemble de revendications quand une demande de connexion a été reçue.
AppInsights-UserSignUp Enregistre un événement UserSignUp quand l’utilisateur déclenche l’option d’inscription dans un parcours d’inscription ou de connexion.
AppInsights-SignInComplete Enregistre un événement SignInComplete si l’authentification réussit, quand un jeton a été envoyé à l’application par partie de confiance.

Ouvrez le fichier TrustFrameworkExtensions.xml à partir du pack de démarrage. Ajoutez les profils techniques à l’élément ClaimsProvider :

<ClaimsProvider>
  <DisplayName>Application Insights</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="AppInsights-Common">
      <DisplayName>Application Insights</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.Insights.AzureApplicationInsightsProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <!-- The ApplicationInsights instrumentation key, which you use for logging the events -->
        <Item Key="InstrumentationKey">xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</Item>
        <Item Key="DeveloperMode">false</Item>
        <Item Key="DisableTelemetry ">false</Item>
      </Metadata>
      <InputClaims>
        <!-- Properties of an event are added through the syntax {property:NAME}, where NAME is the property being added to the event. DefaultValue can be either a static value or a value that's resolved by one of the supported DefaultClaimResolvers. -->
        <InputClaim ClaimTypeReferenceId="EventTimestamp" PartnerClaimType="{property:EventTimestamp}" DefaultValue="{Context:DateTimeInUtc}" />
        <InputClaim ClaimTypeReferenceId="tenantId" PartnerClaimType="{property:TenantId}" DefaultValue="{Policy:TrustFrameworkTenantId}" />
        <InputClaim ClaimTypeReferenceId="PolicyId" PartnerClaimType="{property:Policy}" DefaultValue="{Policy:PolicyId}" />
        <InputClaim ClaimTypeReferenceId="CorrelationId" PartnerClaimType="{property:CorrelationId}" DefaultValue="{Context:CorrelationId}" />
        <InputClaim ClaimTypeReferenceId="Culture" PartnerClaimType="{property:Culture}" DefaultValue="{Culture:RFC5646}" />
      </InputClaims>
    </TechnicalProfile>

    <TechnicalProfile Id="AppInsights-SignInRequest">
      <InputClaims>
        <!-- An input claim with a PartnerClaimType="eventName" is required. This is used by the AzureApplicationInsightsProvider to create an event with the specified value. -->
        <InputClaim ClaimTypeReferenceId="EventType" PartnerClaimType="eventName" DefaultValue="SignInRequest" />
      </InputClaims>
      <IncludeTechnicalProfile ReferenceId="AppInsights-Common" />
    </TechnicalProfile>

    <TechnicalProfile Id="AppInsights-UserSignUp">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="EventType" PartnerClaimType="eventName" DefaultValue="UserSignUp" />
      </InputClaims>
      <IncludeTechnicalProfile ReferenceId="AppInsights-Common" />
    </TechnicalProfile>

    <TechnicalProfile Id="AppInsights-SignInComplete">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="EventType" PartnerClaimType="eventName" DefaultValue="SignInComplete" />
        <InputClaim ClaimTypeReferenceId="federatedUser" PartnerClaimType="{property:FederatedUser}" DefaultValue="false" />
        <InputClaim ClaimTypeReferenceId="parsedDomain" PartnerClaimType="{property:FederationPartner}" DefaultValue="Not Applicable" />
        <InputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="{property:IDP}" DefaultValue="Local" />
      </InputClaims>
      <IncludeTechnicalProfile ReferenceId="AppInsights-Common" />
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

Important

Modifiez la clé d’instrumentation dans le profil technique AppInsights-Common et remplacez-le par le GUID fourni par votre ressource Application Insights.

Ajouter les profils techniques en tant qu’étapes d’orchestration

Ajoutez de nouvelles étapes d’orchestration faisant référence aux profils techniques.

Important

Après avoir ajouté les nouvelles étapes d’orchestration, renumérotez les étapes séquentiellement sans sauter d’entiers de 1 à N.

  1. Appelez AppInsights-SignInRequest comme deuxième étape d’orchestration pour suivre l’état de réception d’une demande d’inscription ou de connexion.

    <!-- Track that we have received a sign in request -->
    <OrchestrationStep Order="2" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="TrackSignInRequest" TechnicalProfileReferenceId="AppInsights-SignInRequest" />
      </ClaimsExchanges>
    </OrchestrationStep>
    
  2. Avant l’étape d’orchestration SendClaims, ajoutez une nouvelle étape qui appelle AppInsights-UserSignup. Celle-ci est déclenchée quand l’utilisateur sélectionne le bouton d’inscription dans un parcours d’inscription ou de connexion.

    <!-- Handles the user selecting the sign-up link in the local account sign-in page -->
    <OrchestrationStep Order="8" Type="ClaimsExchange">
      <Preconditions>
        <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
          <Value>newUser</Value>
          <Action>SkipThisOrchestrationStep</Action>
        </Precondition>
        <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
          <Value>newUser</Value>
          <Value>false</Value>
          <Action>SkipThisOrchestrationStep</Action>
        </Precondition>
      </Preconditions>
      <ClaimsExchanges>
        <ClaimsExchange Id="TrackUserSignUp" TechnicalProfileReferenceId="AppInsights-UserSignup" />
      </ClaimsExchanges>
    </OrchestrationStep>
    
  3. Après l’étape d’orchestration SendClaims, appelez AppInsights-SignInComplete. Cette étape montre la réussite d’un parcours.

    <!-- Track that we have successfully sent a token -->
    <OrchestrationStep Order="10" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="TrackSignInComplete" TechnicalProfileReferenceId="AppInsights-SignInComplete" />
      </ClaimsExchanges>
    </OrchestrationStep>
    

Charger votre fichier, exécuter la stratégie et afficher les événements

Enregistrez et chargez le fichier TrustFrameworkExtensions.xml. Ensuite, appelez la stratégie de partie de confiance à partir de votre application ou utilisez l’option Exécuter maintenant dans le portail Azure. Attendez que vos événements soient disponibles dans Application Insights.

  1. Ouvrez la ressource Application Insights dans votre locataire Azure Active Directory.
  2. Sélectionnez Utilisation, puis Événements.
  3. Définissez Pendant sur Dernière heure et Par sur 3 minutes. Vous devrez peut-être actualiser la fenêtre pour voir les résultats.

Screenshot that shows Application Insights event statistics.

Collecter des données supplémentaires

Pour répondre aux besoins de votre entreprise, vous souhaiterez peut-être enregistrer davantage de revendications. Pour ajouter une revendication, commencez par définir une revendication, puis ajoutez la revendication à la collection de revendications d’entrée. Les revendications que vous ajoutez au profil technique AppInsights-Common s’affichent dans tous les événements. Les revendications que vous ajoutez à un profil technique spécifique s’affichent uniquement dans cet événement. L’élément de revendication d’entrée contient les attributs suivants :

  • ClaimTypeReferenceId est la référence à un type de revendication.
  • PartnerClaimType est le nom de la propriété qui s’affiche dans Azure Insights. Utilisez la syntaxe {property:NAME}, où NAME est une propriété qui est ajoutée à l’événement.
  • DefaultValue est une valeur prédéfinie à enregistrer telle que le nom d’un événement. Si une revendication utilisée dans le parcours utilisateur est vide, la valeur par défaut est utilisée. Par exemple, la revendication identityProvider est définie par les profils techniques de fédération, tels que Facebook. Si la revendication est vide, cela indique que l’utilisateur s’est connecté avec un compte local. Par conséquent, la valeur par défaut est définie sur local. Vous pouvez également enregistrer un outil de résolution des revendications avec une valeur contextuelle telle que l’ID d’application ou l’adresse IP de l’utilisateur.

Manipuler les revendications

Vous pouvez utiliser des transformations de revendications d’entrée pour modifier les revendications d’entrée ou en générer de nouvelles avant de les envoyer à Application Insights. Dans l’exemple suivant, le profil technique comprend la transformation des revendications d’entrée CheckIsAdmin.

<TechnicalProfile Id="AppInsights-SignInComplete">
  <InputClaimsTransformations>  
    <InputClaimsTransformation ReferenceId="CheckIsAdmin" />
  </InputClaimsTransformations>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="isAdmin" PartnerClaimType="{property:IsAdmin}"  />
    ...
  </InputClaims>
  <IncludeTechnicalProfile ReferenceId="AppInsights-Common" />
</TechnicalProfile>

Ajouter des événements

Pour ajouter un événement, créez un nouveau profil technique qui comprend le profil technique AppInsights-Common. Ajoutez ensuite le nouveau profil technique comme étape d’orchestration au parcours utilisateur. Utilisez l’élément Precondition pour déclencher l’événement quand vous êtes prêt. Par exemple, signalez l’événement uniquement quand des utilisateurs passent par l’authentification multifacteur.

<TechnicalProfile Id="AppInsights-MFA-Completed">
  <InputClaims>
     <InputClaim ClaimTypeReferenceId="EventType" PartnerClaimType="eventName" DefaultValue="MFA-Completed" />
  </InputClaims>
  <IncludeTechnicalProfile ReferenceId="AppInsights-Common" />
</TechnicalProfile>

Important

Quand vous ajoutez un événement au parcours utilisateur, n’oubliez pas de renuméroter les étapes d’orchestration de manière séquentielle.

<OrchestrationStep Order="8" Type="ClaimsExchange">
  <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
    <Value>isActiveMFASession</Value>
    <Action>SkipThisOrchestrationStep</Action>
    </Precondition>
  </Preconditions>
  <ClaimsExchanges>
    <ClaimsExchange Id="TrackUserMfaCompleted" TechnicalProfileReferenceId="AppInsights-MFA-Completed" />
  </ClaimsExchanges>
</OrchestrationStep>

Activer le mode développeur

Quand vous utilisez Application Insights pour définir des événements, vous pouvez indiquer si le mode développeur est activé. Le mode développeur contrôle la façon dont les événements sont mis en mémoire tampon. Dans un environnement de développement avec un volume minimal d’événements, l’activation du mode développeur entraîne l’envoi immédiat des événements à Application Insights. La valeur par défaut est false. N’activez pas le mode développeur dans les environnements de production.

Pour activer le mode développeur, affectez la valeur true à DeveloperMode dans les métadonnées du profil technique AppInsights-Common :

<TechnicalProfile Id="AppInsights-Common">
  <Metadata>
    ...
    <Item Key="DeveloperMode">true</Item>
  </Metadata>
</TechnicalProfile>

Désactiver la télémétrie

Pour désactiver les journaux Application Insights, affectez la valeur true à DisableTelemetry dans les métadonnées du profil technique AppInsights-Common :

<TechnicalProfile Id="AppInsights-Common">
  <Metadata>
    ...
    <Item Key="DisableTelemetry">true</Item>
  </Metadata>
</TechnicalProfile>

Étapes suivantes

Découvrez comment créer des tableaux de bord d’indicateurs de performance clés à l’aide d’Azure Application Insights.