私はApplication Insightsを使用して、APIのテレメトリを収集しています。認証されたクライアント(モバイルアプリなど)のみがAPIのリソースにアクセスできます。これは、OAuth2クライアントの資格情報フローを使用しています。システムにユーザーがいません。APIの認証されたユーザーコンテキストを設定していますか?
ユーザコンテキストのAuthenticatedUserId
の値にclient_id
(実際にはユーザを表しているのではなく、「認証済みのアプリケーションまたはデバイス」)を設定するのは意味がありますか?
現在、私たちはカスタムフィールドとして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;
}
}