来自 ASP.NET 核心身份的 Application Insights 用户 ID
Application Insights User ID from ASP.NET Core identity
我正在使用 .NET Core 3.1。我想使用 ASP.NET 核心身份用户名填充 Application Insights 中的 User ID
属性。我得到 this article by Microsoft, but it is for the full .NET Framework. I also tried the following code given (我将声明更改为身份)
public class TelemetryEnrichment : TelemetryInitializerBase
{
public TelemetryEnrichment(IHttpContextAccessor httpContextAccessor) : base(httpContextAccessor)
{
}
protected override void OnInitializeTelemetry(HttpContext platformContext, RequestTelemetry requestTelemetry, ITelemetry telemetry)
{
telemetry.Context.User.AuthenticatedUserId =
platformContext.User?.Identity.Name ?? string.Empty;
}
}
但不知道如何将其包含在管道中。我试过 services.AddSingleton<ITelemetryInitializer, TelemetryEnrichment>();
但没有用。 Application Insights 仍在显示自己的用户 ID。
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, ApplicationRole>(
options => {
options.Stores.MaxLengthForKeys = 128;
options.User.RequireUniqueEmail = true;
options.Password.RequiredLength = 8;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultUI()
.AddDefaultTokenProviders()
.AddRoles<ApplicationRole>()
.AddSignInManager<ApplicationSignInManager>();
services.AddControllersWithViews()
.AddNewtonsoftJson()
.AddRazorRuntimeCompilation();
services.AddRazorPages();
services.AddMvc(mvcOptions =>
{
mvcOptions.ModelBinderProviders.Insert(0, new ModelBinderProvider());
})
.AddRazorPagesOptions(options =>
{
options.Conventions.AddAreaPageRoute("Identity", "/Account/Login", "");
})
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
services.AddAntiforgery(options => options.HeaderName = "XSRF-TOKEN");
services.AddFlashMessage();
services.AddSingleton<IEmailUtility, EmailUtility>();
services.Configure<EmailSettings>(Configuration.GetSection("EmailSettings"));
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
services.AddApplicationInsightsTelemetry();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<ITelemetryInitializer, TelemetryEnrichment>();
var mappingConfig = new MapperConfiguration(mc =>
{
mc.AddProfile(new MappingProfile());
});
var mapper = mappingConfig.CreateMapper();
services.AddSingleton(mapper);
}
为了完整性回答我自己的问题。问题中给出的代码工作得很好。我会再把它放在这里。
要在您的 Application Insights 中获取 ASP.NET 核心身份用户名,您需要自定义遥测初始化程序 请参考@PeterBons 的原始回答
public class TelemetryEnrichment : TelemetryInitializerBase
{
public TelemetryEnrichment(IHttpContextAccessor httpContextAccessor) : base(httpContextAccessor)
{
}
protected override void OnInitializeTelemetry(HttpContext platformContext, RequestTelemetry requestTelemetry, ITelemetry telemetry)
{
telemetry.Context.User.AuthenticatedUserId =
platformContext.User?.Identity.Name ?? string.Empty;
}
}
然后你需要在你的Startup.csConfigureServices
中注册它,如下所示:
public void ConfigureServices(IServiceCollection services)
{
...
...
services.AddApplicationInsightsTelemetry();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<ITelemetryInitializer, TelemetryEnrichment>();
...
...
}
记得把AddApplicationInsightsTelemetry()
放在AddSingleton()
上面
设置完成后,身份用户名将显示在 Application Insights 中的 Auth User ID
属性 下。
--更新--
身份用户名现在显示在 Auth Id
下,而不是上面所述的 Auth User ID
。
我正在使用 .NET Core 3.1。我想使用 ASP.NET 核心身份用户名填充 Application Insights 中的 User ID
属性。我得到 this article by Microsoft, but it is for the full .NET Framework. I also tried the following code given
public class TelemetryEnrichment : TelemetryInitializerBase
{
public TelemetryEnrichment(IHttpContextAccessor httpContextAccessor) : base(httpContextAccessor)
{
}
protected override void OnInitializeTelemetry(HttpContext platformContext, RequestTelemetry requestTelemetry, ITelemetry telemetry)
{
telemetry.Context.User.AuthenticatedUserId =
platformContext.User?.Identity.Name ?? string.Empty;
}
}
但不知道如何将其包含在管道中。我试过 services.AddSingleton<ITelemetryInitializer, TelemetryEnrichment>();
但没有用。 Application Insights 仍在显示自己的用户 ID。
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, ApplicationRole>(
options => {
options.Stores.MaxLengthForKeys = 128;
options.User.RequireUniqueEmail = true;
options.Password.RequiredLength = 8;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultUI()
.AddDefaultTokenProviders()
.AddRoles<ApplicationRole>()
.AddSignInManager<ApplicationSignInManager>();
services.AddControllersWithViews()
.AddNewtonsoftJson()
.AddRazorRuntimeCompilation();
services.AddRazorPages();
services.AddMvc(mvcOptions =>
{
mvcOptions.ModelBinderProviders.Insert(0, new ModelBinderProvider());
})
.AddRazorPagesOptions(options =>
{
options.Conventions.AddAreaPageRoute("Identity", "/Account/Login", "");
})
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
services.AddAntiforgery(options => options.HeaderName = "XSRF-TOKEN");
services.AddFlashMessage();
services.AddSingleton<IEmailUtility, EmailUtility>();
services.Configure<EmailSettings>(Configuration.GetSection("EmailSettings"));
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
services.AddApplicationInsightsTelemetry();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<ITelemetryInitializer, TelemetryEnrichment>();
var mappingConfig = new MapperConfiguration(mc =>
{
mc.AddProfile(new MappingProfile());
});
var mapper = mappingConfig.CreateMapper();
services.AddSingleton(mapper);
}
为了完整性回答我自己的问题。问题中给出的代码工作得很好。我会再把它放在这里。
要在您的 Application Insights 中获取 ASP.NET 核心身份用户名,您需要自定义遥测初始化程序 请参考@PeterBons 的原始回答
public class TelemetryEnrichment : TelemetryInitializerBase
{
public TelemetryEnrichment(IHttpContextAccessor httpContextAccessor) : base(httpContextAccessor)
{
}
protected override void OnInitializeTelemetry(HttpContext platformContext, RequestTelemetry requestTelemetry, ITelemetry telemetry)
{
telemetry.Context.User.AuthenticatedUserId =
platformContext.User?.Identity.Name ?? string.Empty;
}
}
然后你需要在你的Startup.csConfigureServices
中注册它,如下所示:
public void ConfigureServices(IServiceCollection services)
{
...
...
services.AddApplicationInsightsTelemetry();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<ITelemetryInitializer, TelemetryEnrichment>();
...
...
}
记得把AddApplicationInsightsTelemetry()
放在AddSingleton()
设置完成后,身份用户名将显示在 Application Insights 中的 Auth User ID
属性 下。
--更新--
身份用户名现在显示在 Auth Id
下,而不是上面所述的 Auth User ID
。