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();
        });
        // …
    }
}