我正在为IIS后面运行的Intranet asp.net核心Web应用程序使用Windows身份验证 我想在用户访问应用程序并创建会话时记录事件。
某些身份验证服务提供了一种在配置这些服务时为事件添加事件处理程序的方法,例如“OnSigningIn”,“OnSignedIn”,“OnTokenvalidated”等。
通过services.AddAuthentication(IISDefaults.AuthenticationScheme)或services.AddSession()或其他方式使用Windows身份验证时,有没有办法做类似的事情?
答案 0 :(得分:1)
Windows身份验证发生在IIS级别,在ASP.NET Core甚至看到请求之前,这就是为什么没有任何可以处理的事件。会议也没有任何活动。
一旦将记录器注入Startup,就可以注入一个简单的中间件,
public class Startup
{
private readonly ILogger<Startup> _logger;
public IConfiguration Configuration { get; }
public Startup(ILogger<Startup> logger, IConfiguration configuration)
{
_logger = logger;
Configuration = configuration;
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// The typical startup crud, then
app.Use(async (context, next) =>
{
int logged = context.Session.GetInt32("Logged") ?? 0;
if (visits == 0 && CheckIfThisRequestNeedsToUseSession(context))
{
// New session
// Log with _logger, then mark so it doesn't repeat
context.Session.SetInt32("IKnowYou", 1);
// ...
}
await next();
});
// …
}
}