Поделиться через


Отслеживание поведения пользователей в Azure AD B2C с использованием Application Insights

Для начала с помощью селектора Choose a policy type (Выбрать тип политики) выберите тип пользовательской политики. Azure Active Directory B2C предлагает два метода определения способа взаимодействия пользователей с вашими приложениями: с помощью предопределенных потоков пользователей или полностью настраиваемых пользовательских политик. Действия, которые необходимо выполнить, отличаются для каждого метода.

Эта возможность доступна только для пользовательских политик. Чтобы ознакомиться с этапами установки, в предыдущем селекторе выберите Настраиваемая политика.

Azure Active Directory B2C (Azure AD B2C) поддерживает отправку данных о событиях непосредственно в Application Insights с использованием ключа инструментирования, предоставляемого в Azure AD B2C. С помощью технического профиля Application Insights можно получить подробные и настраиваемые журналы событий для путей взаимодействия пользователя. Они позволяют:

  • Получить сведения о поведении пользователей.
  • Устранить проблемы в собственных политиках в среде разработки или в рабочей среде.
  • Измерить производительность.
  • Создать уведомления из Application Insights.

Обзор

Чтобы включить пользовательские журналы событий, добавьте технический профиль Application Insights. В техническом профиле задаются ключ инструментирования Application Insights, имя события и регистрируемые утверждения. Для публикации события технический профиль добавляется в качестве шага оркестрации в путь взаимодействия пользователя.

При использовании Application Insights учитывайте перечисленные ниже моменты.

  • Новые журналы появляются в Application Insights с некоторой задержкой (обычно менее пяти минут).
  • Azure AD B2C позволяет выбрать регистрируемые утверждения. Не выбирайте утверждения с личными данными.
  • Для регистрации сеанса пользователя можно использовать идентификатор корреляции, позволяющий объединять события.
  • Технический профиль Application Insights вызывается непосредственно из пути взаимодействия пользователя или из ветви пути. Не используйте технический профиль Application Insights в качестве технического профиля проверки.

Необходимые компоненты

Создание ресурса Application Insights

При использовании Application Insights с Azure AD B2C потребуется только создать ресурс и получить ключ инструментирования. Дополнительные сведения см. в статье Создание ресурса Application Insights.

  1. Войдите на портал Azure.
  2. Если у вас есть доступ к нескольким клиентам, выберите значок Параметры в верхнем меню, чтобы переключиться на клиент Идентификатора Microsoft Entra из меню каталогов и подписок.
  3. Выберите Создать ресурс в левом верхнем углу окна портала Azure, а затем найдите и выберите Application Insights.
  4. Выберите Создать.
  5. Для значения имени укажите имя группы ресурсов.
  6. Из списка Application type (Тип приложения) выберите Веб-приложение ASP.NET.
  7. Для Группы ресурсов выберите существующую группу или укажите имя, чтобы создать новую.
  8. Выберите Создать.
  9. Создав ресурс Application Insights, разверните основные компоненты и скопируйте ключ инструментирования.

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

Определение утверждений

Утверждение предоставляет временное хранилище данных на время выполнения политики Azure AD B2C. Утверждения объявляются в элементе схемы утверждений ClaimsSchema.

  1. Откройте файл расширения политики. Файл будет выглядеть примерно так: SocialAndLocalAccounts/TrustFrameworkExtensions.xml.

  2. Найдите элемент BuildingBlocks. Если вы не видите этот элемент, добавьте его.

  3. Найдите элемент ClaimsSchema. Если вы не видите этот элемент, добавьте его.

  4. Добавьте в элемент 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>
    

Добавление новых технических профилей

Технические профили можно рассматривать как функции в пользовательской политике. Эти функции используют принцип включения технического профиля, а технический профиль, в свою очередь, включает еще один технический профиль и изменяет параметры или добавляет новые функции. В таблице ниже определены технические профили, используемые для открытия сеанса и публикации событий.

Технический профиль Задача
AppInsights-Common Общий технический профиль с типичной конфигурацией. Он содержит ключ инструментирования Application Insights, коллекцию регистрируемых утверждений и режим разработчика. Другие технические профили включают общий технический профиль и дополнительные утверждения, например имя события.
AppInsights-SignInRequest Регистрирует событие SignInRequest с набором утверждений при получении запроса на вход.
AppInsights-UserSignUp Регистрирует событие UserSignUp, когда пользователь запускает регистрацию в пути взаимодействия регистрации или входа.
AppInsights-SignInComplete Регистрирует событие SignInComplete при успешной проверке подлинности при передаче токена в приложение проверяющей стороны.

Откройте файл из стартового пакета TrustFrameworkExtensions.xml. Добавьте технические профили в элемент 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>

Важно!

Замените ключ инструментирования в техническом профиле AppInsights-Common идентификатором GUID, который предоставляется ресурсом Application Insights.

Добавление технических профилей в качестве шагов оркестрации

Добавьте новые шаги оркестрации, которые используют ваши технические профили.

Важно!

После добавления новых шагов оркестрации повторно последовательно пронумеруйте шаги, не пропуская ни одного целого числа от 1 до N.

  1. Вызовите метод AppInsights-SignInRequest в качестве второго шага оркестрации. Этот шаг отслеживает получение запроса на регистрацию или вход.

    <!-- Track that we have received a sign in request -->
    <OrchestrationStep Order="2" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="TrackSignInRequest" TechnicalProfileReferenceId="AppInsights-SignInRequest" />
      </ClaimsExchanges>
    </OrchestrationStep>
    
  2. Перед шагом оркестрации SendClaims добавьте новый шаг, который вызывает AppInsights-UserSignup. Он активируется, когда пользователь нажимает кнопку "Регистрация" в пути взаимодействия регистрации и входа.

    <!-- 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. После шага регистрации SendClaims вызовите AppInsights-SignInComplete. Этот шаг указывает на успешное завершение пути взаимодействия.

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

Отправка файла, выполнение политики и просмотр событий

Сохраните и отправьте файл TrustFrameworkExtensions.xml. Затем вызовите политику проверяющей стороны из своего приложения или используйте функцию Запустить сейчас на портале Azure. Подождите, пока события не станут доступны в Application Insights.

  1. Откройте ресурс Application Аналитика в клиенте Microsoft Entra.
  2. Выберите Использование, а затем — События.
  3. Установите для поля Во время значение Последний час, а для поля By (До) — 3 минуты. Чтобы увидеть результаты, вам, возможно, потребуется обновить содержимое окна.

Screenshot that shows Application Insights event statistics.

Сбор дополнительных данных

В зависимости от потребностей вам может понадобиться регистрировать и другие утверждения. Чтобы добавить утверждение, сначала определите его, а затем добавьте в коллекцию входящих утверждений. Утверждения, добавляемые в технический профиль AppInsights-Common, отображаются во всех событиях. Утверждения, добавляемые в определенный технический профиль, отображаются только в соответствующем событии. Элемент входного утверждения содержит указанные ниже атрибуты.

  • ClaimTypeReferenceId — это ссылка на тип утверждения.
  • PartnerClaimType — имя свойства, отображаемое в Azure Insights. Используйте синтаксис {property:NAME}, в котором свойство NAME добавляется в событие.
  • DefaultValue — это предопределенное значение, которое необходимо зарегистрировать, например имя события. Если утверждение, используемое в пути взаимодействия пользователя, является пустым, берется значение по умолчанию. Например, утверждение identityProvider задается техническими профилями федерации, такими как Facebook. Если это утверждение пустое, оно указывает, что пользователь вошел в локальную учетную запись. Таким образом, по умолчанию установлено значение Local. Можно также регистрировать арбитры утверждений с контекстным значением, например идентификатором приложения или IP-адресом пользователя.

Обработка утверждений

С помощью преобразований входящих утверждений можно вносить изменения во входящие утверждения или создавать новые перед отправкой в Application Insights. В примере ниже технический профиль включает преобразование входных утверждений CheckIsAdmin.

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

Добавление событий

Чтобы добавить событие, создайте технический профиль, включающий технический профиль AppInsights-Common. Затем добавьте новый технический профиль в качестве шага оркестрации для пути взаимодействия пользователя. С помощью элемента предусловия активируйте событие, когда будете готовы. Например, можно регистрировать событие только в том случае, если пользователь проходит многофакторную проверку подлинности.

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

Важно!

При добавлении события в путь взаимодействия пользователя не забывайте последовательно перенумеровать шаги оркестрации.

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

Включение режима разработчика приложений

При определении событий с помощью Application Insights также можно указать, включен ли режим разработчика. Режим разработчика определяет способ буферизации событий. В среде разработки с минимальным объемом событий включение режима разработчика приводит к тому, что события сразу отправляются в Application Insights. Значение по умолчанию — false. Не включайте режим разработчика в рабочих средах.

Чтобы включить режим разработчика, измените значение метаданных DeveloperMode на true в техническом профиле AppInsights-Common:

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

Отключение данных телеметрии

Чтобы отключить журналы Application Insights, измените значение метаданных DisableTelemetry на true в техническом профиле AppInsights-Common:

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

Следующие шаги

Узнайте, как создавать настраиваемые панели мониторинга ключевых показателей эффективности с помощью Azure Application Insights.