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

时间:2016-10-21 12:25:38

标签: 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 个答案:

答案 0 :(得分:1)

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

如果你使用这些字段,那么" user"如果以前没有显示任何内容,门户中的基础图表​​应为您点亮。

还有一个user.AnonymousId可用于在用户进行身份验证之前跟踪事物,如果有这样的话。