У нас есть веб-приложение ASP. NET Core 2 с настраиваемым ITelemetryInitializer , которое предоставляет пользователю OpenIdConnect UserID . Обычно идентификаторы пользователей auth запутываются в соответствии с политикой MS, но инициализатор является обычным способом решения этой проблемы. «Просмотры страниц».
Наш основной вариант использования идентификатора пользователя - это тенденции использования пользователями, которые c указываются нашим клиентам, и лучше всего для этого используется тип просмотра страницы. (Пример: Пользователь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
Request With UserID Telemetry Working
Запрос с работающей телеметрией UserID
(Я не могу точно показать здесь доказательство UserID для очевидных целей.)