asp.net 使用 windows 身份验证创建核心会话
asp.net core session creation with windows authentication
我正在为 IIS 后面的 Intranet asp.net 核心 Web 应用程序 运行 使用 windows 身份验证。
我想在用户访问应用程序并创建会话时记录事件。
某些身份验证服务提供了一种方法,可以在配置这些服务时将 "OnSigningIn"、"OnSignedIn"、"OnTokenvalidated" 等事件的事件处理程序添加到选项中.
在通过 services.AddAuthentication(IISDefaults.AuthenticationScheme) 或 services.AddSession() 或其他方式使用 Windows 身份验证时,有没有办法做类似的事情?
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();
});
// …
}
}
我正在为 IIS 后面的 Intranet asp.net 核心 Web 应用程序 运行 使用 windows 身份验证。
我想在用户访问应用程序并创建会话时记录事件。
某些身份验证服务提供了一种方法,可以在配置这些服务时将 "OnSigningIn"、"OnSignedIn"、"OnTokenvalidated" 等事件的事件处理程序添加到选项中.
在通过 services.AddAuthentication(IISDefaults.AuthenticationScheme) 或 services.AddSession() 或其他方式使用 Windows 身份验证时,有没有办法做类似的事情?
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();
});
// …
}
}