为 API 设置经过身份验证的用户上下文?

Setting the authenticated user context for an API?

我正在使用 Application Insights 收集 API 的遥测数据。只有经过身份验证的客户端(如移动应用程序)才能访问 API 的资源。这是使用 OAuth2 客户端凭据流程。系统中没有用户。

client_id(实际上不代表用户而是 "authenticated application or device")设置为用户上下文中的 AuthenticatedUserId 值是否有意义?

目前我们将 client_id 存储为自定义字段,但我刚刚发现有一个 "user" 部分在遥测上下文中发送。

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;
    }
}

是的,您可以使用 context.user id 字段来使用您想要的任何类型的 id。

如果您使用这些字段,门户中一些基于 "user" 的图表 应该 为您点亮,如果它们之前没有显示任何内容的话。

还有一个 user.AnonymousId 可用于在用户通过身份验证之前跟踪事物(如果有的话)。