Настройка контекста пользователя, прошедшего проверку подлинности, для API?

#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 поля идентификатора, чтобы использовать любой тип идентификатора, который вы хотите.

если вы используете эти поля, некоторые диаграммы на основе «пользователя» на портале должны отображаться для вас, если раньше они ничего не показывали.

там также есть пользователь.Анонимный идентификатор, который вы могли бы использовать для отслеживания действий до аутентификации пользователя, если бы такая вещь существовала.