UserID ITelemetryInitializer в Application Insights не работает для просмотра страницы
У нас есть ASP.NET Core, 2 веб - приложение с пользовательской ITelemetryInitializer, который обеспечивает пользователя OpenIdConnect в UserID. Обычно идентификаторы пользователей auth запутываются в соответствии с политикой MS, но инициализатор является обычным способом решения этой проблемы.
ПРОБЛЕМА: инициализатор отлично работает для типа телеметрии "запрос", но не для "просмотров страниц".
Наш основной вариант использования идентификатора пользователя - это тенденции использования пользователями, которые характерны для наших клиентов, и лучше всего для этого использовать тип просмотра страницы. (Пример: Пользователь1 из ClientA перешел на страницу 1 >> страница 5 >>, а затем вернулся на страницу 5).
Это труднее получить из чисто "запросных" событий.
Код:
public void Initialize(ITelemetry telemetry)
{
var httpContext = _httpContextAccessor.HttpContext;
if (httpContext != null && httpContext.User.Identity.IsAuthenticated == true)
{
telemetry.Context.User.AuthenticatedUserId = httpContext.User.FindFirst("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier").Value;
telemetry.Context.User.AccountId = httpContext.User.FindFirst("aslkjsfd2").Value;
telemetry.Context.User.Id = httpContext.User.FindFirst("asdfljsd1").Value;
// Set the session id on the Application Insights telemetry item to be same as User.Id
telemetry.Context.Session.Id = telemetry.Context.User.Id;
ISupportProperties propTelemetry = telemetry as ISupportProperties;
// Add Custom Property "Name"
const string namePropertyKey = "User Name";
if (propTelemetry != null && !propTelemetry.Properties.ContainsKey(namePropertyKey))
{
string tenantId = httpContext.User.FindFirst("Name").Value;
propTelemetry.Properties.Add(namePropertyKey, tenantId);
}
// Add Custom Property "Email"
const string emailPropertyKey = "User Email";
if (propTelemetry != null && !propTelemetry.Properties.ContainsKey(emailPropertyKey))
{
string tenantId = httpContext.User.FindFirst("Email").Value;
propTelemetry.Properties.Add(emailPropertyKey, tenantId);
}
}
}
Просмотр страницы без идентификатора пользователя, кроме MS Obfuscated
Запрос с работающей телеметрией UserID
(Я не могу точно показать здесь доказательство UserID для очевидных целей.)