Отслеживание поведения пользователей в 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 в качестве технического профиля проверки.
Необходимые компоненты
- Выполните шаги, описанные в статье Начало работы с настраиваемыми политиками в Azure Active Directory B2C.
- Если вы еще этого не сделали, зарегистрируйте веб-приложение.
Создание ресурса Application Insights
При использовании Application Insights с Azure AD B2C потребуется только создать ресурс и получить ключ инструментирования. Дополнительные сведения см. в статье Создание ресурса Application Insights.
- Войдите на портал Azure.
- Если у вас есть доступ к нескольким клиентам, выберите значок Параметры в верхнем меню, чтобы переключиться на клиент Идентификатора Microsoft Entra из меню каталогов и подписок.
- Выберите Создать ресурс в левом верхнем углу окна портала Azure, а затем найдите и выберите Application Insights.
- Выберите Создать.
- Для значения имени укажите имя группы ресурсов.
- Из списка Application type (Тип приложения) выберите Веб-приложение ASP.NET.
- Для Группы ресурсов выберите существующую группу или укажите имя, чтобы создать новую.
- Выберите Создать.
- Создав ресурс Application Insights, разверните основные компоненты и скопируйте ключ инструментирования.
Определение утверждений
Утверждение предоставляет временное хранилище данных на время выполнения политики Azure AD B2C. Утверждения объявляются в элементе схемы утверждений ClaimsSchema.
Откройте файл расширения политики. Файл будет выглядеть примерно так:
SocialAndLocalAccounts/
TrustFrameworkExtensions.xml
.Найдите элемент BuildingBlocks. Если вы не видите этот элемент, добавьте его.
Найдите элемент ClaimsSchema. Если вы не видите этот элемент, добавьте его.
Добавьте в элемент 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.
Вызовите метод
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>
Перед шагом оркестрации
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>
После шага регистрации
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.
- Откройте ресурс Application Аналитика в клиенте Microsoft Entra.
- Выберите Использование, а затем — События.
- Установите для поля Во время значение Последний час, а для поля By (До) — 3 минуты. Чтобы увидеть результаты, вам, возможно, потребуется обновить содержимое окна.
Сбор дополнительных данных
В зависимости от потребностей вам может понадобиться регистрировать и другие утверждения. Чтобы добавить утверждение, сначала определите его, а затем добавьте в коллекцию входящих утверждений. Утверждения, добавляемые в технический профиль 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.