我有一个ASP.Net MVC 5应用程序,目前使用个人身份验证(帐户/ login.cshtml页面没有身份验证/匿名访问)和OWIN。工作正常。ASP.Net MVC - OWIN - 允许Windows /个人身份验证
由于这是一个Intranet应用程序,我希望允许用户在他们的Windows帐户,其他用户Windows帐户或应用程序帐户(管理员,特殊用户等)登录 - 这些帐户没有关联的域帐户。
对于第一个选项,我想在登录屏幕上显示他们的Windows用户名,他们只需点击“确定”按钮即可登录。要获取用户名,我修改了Visual Studio项目属性以禁用匿名身份验证并启用Windows身份验证。还修改了web.config并将身份验证模式设置为Forms。这会导致“HTTP错误404.15 - 未找到”。这似乎是由于由OWIN引起的验证循环,并带有以下修复建议:
- 确保登录控制器方法允许匿名访问(默认情况下似乎是这种方式)。
- 或修改Startup.auth,注销LoginPath属性。
- 或者修改web.config,添加值为“false”的appSetting“owin:AutomaticAppStartup”。
我选择了LoginPath修复,这似乎工作(如web.config更改),因为没有错误,登录页面显示与Windows用户名(使用System.Threading.Thread.Currentprinciple检索.Identity.Name)。
现在的问题是,一旦用户登录OwinContext没有用户(HttpContext.GetOwinContext()。GetUserManager())。
理想情况下,我不需要IIS或OWIN进行任何身份验证,因为它是由应用完成的 - 但我需要初始请求(对于帐户/登录页面)包含Authenticate头部,以便可以获取Windows用户。
首先我想了解是什么导致“HTTP错误404.15”并修复。 其次,我如何让OWIN与认证更改一起工作 - 我只是需要它来坚持用户进行控制器认证。
感谢您的快速反应Phil.P.我已经尝试了Forms和Windows身份验证,并且都产生了相同的结果。请注意 - 我需要的所有Windows身份验证都是在初始请求中传递客户端用户名 - 然后,如果Windows用户在数据库和LDAP查询中对用户表进行身份验证。 –
@ Leigh.D你打算如何验证LDAP?什么阻止我作为黑客来取代我通过已知Windows用户名传递的内容并进行有效验证? Windows身份验证是指验证实际用户身份验证的NTLM。您必须在“使用个人帐户”中使用Forms,项目设置,并使用其他auth端点/中间件进行Windows身份验证。 –