Session 使用windows身份验证创建asp.net核心会话

Session 使用windows身份验证创建asp.net核心会话,session,authentication,asp.net-core,windows-authentication,Session,Authentication,Asp.net Core,Windows Authentication,我正在对运行在IIS之后的intranet asp.net核心web应用程序使用windows身份验证。 我想在用户访问应用程序并创建会话时记录事件 一些身份验证服务提供了在配置这些服务时向选项添加事件处理程序的方法,例如“OnSigningIn”、“OnSignedIn”、“OnTokenvalidated”等 当通过services.AddAuthentication(IISDefaults.AuthenticationScheme)或services.AddSession()或其他方式使用

我正在对运行在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();
        });
        // …
    }
}
公共类启动
{
专用只读ILogger\u记录器;
公共IConfiguration配置{get;}
公共启动(ILogger记录器、IConfiguration配置)
{
_记录器=记录器;
配置=配置;
}
公共无效配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{
//典型的启动积垢,然后
应用程序使用(异步(上下文,下一步)=>
{
int logged=context.Session.GetInt32(“logged”)??0;
如果(访问次数==0&&CheckIfThisRequestNeedsToUseSession(上下文))
{
//新会议
//使用_logger记录,然后进行标记,使其不会重复
context.Session.SetInt32(“我知道你”,1);
// ...
}
等待下一个();
});
// …
}
}

Ok。这就是我现在正在处理的——查看每个请求上的用户和会话数据,以确定这是会话的第一个请求还是会话已经在管道中看到。我在想可能会有更直接的方法,但这会奏效的。感谢您的澄清。我对intranet应用程序的要求与此类似,我需要检查会话是否是新的,但不需要登录。用户网络ID将用于查询数据表,以获取未包含在我们的广告帐户数据中的员工信息。从“app.Use”开始的代码就是我可以这样做的地方,这对吗?谢谢