UserID ITelemetryInitializer в Application Insights не работает для просмотра страницы - PullRequest
0 голосов
/ 07 мая 2020

У нас есть веб-приложение 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

enter image description here


Request With UserID Telemetry Working

Запрос с работающей телеметрией UserID

(Я не могу точно показать здесь доказательство UserID для очевидных целей.)

...