尝试在测试环境中实现主题。
.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”按钮。 他可以输入凭据或按下按钮,然后输入他的操作系统身份。
答案 0 :(得分:2)
我使用IIS做了非常相似的事情,而不是WebListener,但也许我可以告诉你一些可以帮助的事情。
您已经为我的IIS配置了WebListener以允许匿名访问,但也能够协商身份验证,该部分应该没问题。
但是在" / ntlm" url path,你已经安装了一个CookieAuthentication中间件,它会尝试在传入的请求中找到一个用于验证用户身份的cookie,而我并不认为这是你想要的。相反,在" / ntlm"在路径中,您希望重用来自NTLM的标识或WebListener检测到的Kerberos数据包。在我的情况下,正确设置后,它是负责设置身份的IIS中间件。我建议:
HttpContext.User.Identity.Name;