ASP.NET 核心中特定路由的 NTLM 身份验证
NTLM authentication on specific route in ASP.NET Core
正在尝试在测试环境中实现主题。
.UseWebListener(options=>
{
options.ListenerSettings.Authentication.Schemes = AuthenticationSchemes.NTLM |
AuthenticationSchemes.Negotiate;
options.ListenerSettings.Authentication.AllowAnonymous = true;
})
和
app.UseWhen(context => context.Request.Path.StartsWithSegments("/ntlm"),
builder => builder.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AutomaticAuthenticate = true,
AutomaticChallenge = true,
LoginPath = "/Main/Login",
LogoutPath = "/Main/Logout",
AuthenticationScheme = "NTLM", AccessDeniedPath = "/Main/Deny"
}
));
app.UseWhen(context => !context.Request.Path.StartsWithSegments("/ntlm"),
builder => builder.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AutomaticAuthenticate = false,
AutomaticChallenge = false,
LoginPath = "/Main/Login",
LogoutPath = "/Main/Logout",
AuthenticationScheme = "Cookies"
}
));
但是请求路径是否以“/ntlm”开头似乎没有区别。
我尝试了 运行 两个 WebListener,但我认为开销要大得多。
我想达到的目标:
用户使用登录表单进入起始页,上面有一个 "Windows auth" 按钮。
他可以输入凭据或按下按钮,然后使用他的 OS 身份进入。
我正在使用 IIS 而不是 WebListener 做一些非常相似的事情,但也许我可以告诉你一些可以帮助你的事情。
您已经像我为 IIS 所做的那样配置 WebListener 以允许匿名访问,但也能够协商身份验证,这部分应该没问题。
但是在“/ntlm”url 路径上,您安装了 CookieAuthentication 中间件,它将尝试在传入请求中找到 cookie 以验证用户身份,但我认为这不是您想要的想。相反,在“/ntlm”路径上,您希望重用来自 WebListener 检测到的 NTLM 或 Kerberos 数据包的身份。就我而言,正确设置后,它是一个负责设置身份的 IIS 中间件。我会建议:
- 在 "ntlm" 路径
上删除此 UseCookieAuthentication
- 创建一个控制器和一个带有“[Authorize]”属性的动作来触发身份验证
- 显示
HttpContext.User.Identity.Name;
- 希望您能在此处正确验证 Windows 用户
正在尝试在测试环境中实现主题。
.UseWebListener(options=>
{
options.ListenerSettings.Authentication.Schemes = AuthenticationSchemes.NTLM |
AuthenticationSchemes.Negotiate;
options.ListenerSettings.Authentication.AllowAnonymous = true;
})
和
app.UseWhen(context => context.Request.Path.StartsWithSegments("/ntlm"),
builder => builder.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AutomaticAuthenticate = true,
AutomaticChallenge = true,
LoginPath = "/Main/Login",
LogoutPath = "/Main/Logout",
AuthenticationScheme = "NTLM", AccessDeniedPath = "/Main/Deny"
}
));
app.UseWhen(context => !context.Request.Path.StartsWithSegments("/ntlm"),
builder => builder.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AutomaticAuthenticate = false,
AutomaticChallenge = false,
LoginPath = "/Main/Login",
LogoutPath = "/Main/Logout",
AuthenticationScheme = "Cookies"
}
));
但是请求路径是否以“/ntlm”开头似乎没有区别。
我尝试了 运行 两个 WebListener,但我认为开销要大得多。
我想达到的目标: 用户使用登录表单进入起始页,上面有一个 "Windows auth" 按钮。 他可以输入凭据或按下按钮,然后使用他的 OS 身份进入。
我正在使用 IIS 而不是 WebListener 做一些非常相似的事情,但也许我可以告诉你一些可以帮助你的事情。
您已经像我为 IIS 所做的那样配置 WebListener 以允许匿名访问,但也能够协商身份验证,这部分应该没问题。
但是在“/ntlm”url 路径上,您安装了 CookieAuthentication 中间件,它将尝试在传入请求中找到 cookie 以验证用户身份,但我认为这不是您想要的想。相反,在“/ntlm”路径上,您希望重用来自 WebListener 检测到的 NTLM 或 Kerberos 数据包的身份。就我而言,正确设置后,它是一个负责设置身份的 IIS 中间件。我会建议:
- 在 "ntlm" 路径 上删除此 UseCookieAuthentication
- 创建一个控制器和一个带有“[Authorize]”属性的动作来触发身份验证
- 显示
HttpContext.User.Identity.Name;
- 希望您能在此处正确验证 Windows 用户