#azure-application-insights
#azure-application-insights
Вопрос:
Я использую Application Insights для сбора телеметрии для API. Только клиенты, прошедшие проверку подлинности (например, мобильное приложение), могут получить доступ к ресурсам API. При этом используется поток учетных данных клиента OAuth2. В системе нет пользователей.
Имеет ли смысл установить client_id
(которое на самом деле представляет не пользователя, а скорее «аутентифицированное приложение или устройство») AuthenticatedUserId
значение в контексте пользователя?
В настоящее время мы сохраняем client_id
как пользовательское поле, но я только что обнаружил, что существует раздел «пользователь», который отправляется в контексте телеметрии.
public class ClientIdTelemetryInitialiser : TelemetryInitializerBase
{
public ClientIdTelemetryInitialiser(IHttpContextAccessor contextAccessor)
: base(contextAccessor)
{ }
protected override void OnInitializeTelemetry(
HttpContext platformContext,
RequestTelemetry rootRequestTelemetry,
ITelemetry telemetry)
{
var claims = platformContext.User.Claims;
var clientId = claims.SingleOrDefault(x => x.Type.Equals("client_id", StringComparison.InvariantCultureIgnoreCase));
// Old way of doing it
rootRequestTelemetry.Context.Properties["client_id"] = clientId.Value;
// New way of doing it??
rootRequestTelemetry.Context.User.AuthenticatedUserId = clientId.Value;
}
}
Ответ №1:
Да, вы можете использовать context.user
поля идентификатора, чтобы использовать любой тип идентификатора, который вы хотите.
если вы используете эти поля, некоторые диаграммы на основе «пользователя» на портале должны отображаться для вас, если раньше они ничего не показывали.
там также есть пользователь.Анонимный идентификатор, который вы могли бы использовать для отслеживания действий до аутентификации пользователя, если бы такая вещь существовала.