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


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

Прежде чем начать, используйте селектор типа политики в верхней части этой страницы, чтобы выбрать тип политики, которую вы настроите. 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 ID из меню Каталоги и подписки.
  3. Выберите "Создать ресурс " в левом верхнем углу портала Azure, а затем найдите и выберите Application Insights.
  4. Выберите Создать.
  5. В поле "Имя" введите имя ресурса.
  6. Для типа приложения выберите ASP.NET веб-приложение.
  7. Для группы ресурсов выберите существующую группу или введите имя новой группы.
  8. Выберите Создать.
  9. Откройте новый ресурс Application Insights, разверните раздел Essentials и скопируйте строку подключения.

Снимок экрана: строка подключения на вкладке

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

Утверждение предоставляет временное хранилище данных на время выполнения политики 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 connection string, which you use for logging the events -->
        <Item Key="ConnectionString">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. Определите файл политики, содержащий путешествие пользователя, например SocialAndLocalAccounts/SignUpOrSignin.xml, а затем откройте его.

  2. Вызов 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>
    
  3. SendClaims Перед шагом оркестрации добавьте новый шаг, который вызываетAppInsights-UserSignup. Он активируется, когда пользователь выбирает кнопку регистрации в пути регистрации или входа. Возможно, потребуется обновить шаг оркестрации, чтобы убедиться, Order="8"что вы не пропустите целое число от первого до последнего шага оркестрации.

    <!-- Handles the user selecting the sign-up link in the local account sign-in page 
     The `SendClaims` orchestration step comes after this one,
     -->
    <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>
    
  4. SendClaims После шага оркестрации вызовите AppInsights-SignInComplete. На этом шаге показан успешно завершенный маршрут. Возможно, потребуется обновить шаг оркестрации, чтобы убедиться, Order="10"что вы не пропустите целое число от первого до последнего шага оркестрации.

    <!-- Track that we have successfully sent a token 
     The `SendClaims` orchestration step come before this one,
     -->
    <OrchestrationStep Order="10" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="TrackSignInComplete" TechnicalProfileReferenceId="AppInsights-SignInComplete" />
      </ClaimsExchanges>
    </OrchestrationStep>
    

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

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

  1. Откройте ресурс Application Insights в клиенте Microsoft Entra.
  2. Выберите "Использование" и выберите "События".
  3. Установите значение В течениепоследнего часа и через3 минуты. Чтобы просмотреть результаты, может потребоваться обновить окно.

Снимок экрана: статистика событий Application Insights.

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

Для соответствия бизнес-потребностям может потребоваться записать больше утверждений. Чтобы добавить утверждение, сначала определите утверждение, а затем добавьте утверждение в коллекцию входных утверждений. Утверждения, добавляемые в технический профиль 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.