为 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 可用于在用户通过身份验证之前跟踪事物(如果有的话)。
我正在使用 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 可用于在用户通过身份验证之前跟踪事物(如果有的话)。