【问题标题】:asp.net core session creation with windows authentication使用 Windows 身份验证创建 asp.net 核心会话
【发布时间】:2018-10-11 17:36:21
【问题描述】:

我正在对在 IIS 后面运行的 Intranet asp.net 核心 Web 应用程序使用 Windows 身份验证。
我想在用户访问应用程序并创建会话时记录事件。

一些身份验证服务提供了一种方法,可以在配置这些服务时将“OnSigningIn”、“OnSignedIn”、“OnTokenvalidated”等事件的事件处理程序添加到选项中。

在通过 services.AddAuthentication(IISDefaults.AuthenticationScheme) 或 services.AddSession() 或其他方式使用 Windows 身份验证时,有没有办法做类似的事情?

【问题讨论】:

    标签: session authentication asp.net-core windows-authentication


    【解决方案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();
            });
            // …
        }
    }
    

    【讨论】:

    • 好的。这就是我现在正在使用的东西 - 查看每个请求的用户和会话数据,以确定这是会话的第一个请求,还是会话已经在管道中看到。我在想可能会有更直接的方法,但这会起作用。感谢您的澄清。
    • 我对 Intranet 应用程序的要求类似,因为我需要检查会话是否是新的但不记录。用户网络 ID 将用于查询数据表以获取未包含在我们的 AD 帐户数据中的员工信息。我是否正确,从“app.Use”开始的代码将是我可以做到这一点的地方?谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 2019-08-05
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    相关资源
    最近更新 更多