我有一个ASP.NET MVC应用程序,它完全在表单例份验证后面。但是,我需要强制启用一组路由(/report/%),因为那些页面需要模拟当前用户(出于安全原因)。
如果我将整个站点设置为集成的Windows身份验证,那么一切正常,除了firefox在用户访问站点首页时两次提示用户输入用户名/密码(一次用于Windows身份验证,然后再次用于表单例份验证),而IE仅提示输入表单例份验证。很好,我知道这是Firefox的默认行为,但是为了避免烦扰用户,我被要求将Windows身份验证要求限制为仅网站的/report/*部分,因此,仅当出现以下情况时,系统才会提示他们他们转到/report/%内的任何页面。
在ASP.NET WebForms中,这很容易,因为有一个物理/report文件夹用于放置身份验证配置,但是在MVC中,此URL是虚拟的,因此我不能这样做。有人知道这样做的好方法吗?我尝试创建一个“网关” aspx页面,在重定向到适当的报告页面之前,用户需要首先浏览该页面,尽管Firefox确实会在正确的位置提示用户输入Windows凭据,但它似乎并没有保持将这些详细信息以供后续请求发送到任何/report/%页面。有任何想法吗?会非常感激的!
最佳答案
就在最近,我不得不做类似的事情。我的大多数asp.net MVC应用程序都要求具有表单例份验证,其中一部分需要Windows身份验证。
我最终要做的是将我的Web应用程序分成两个项目。
第一个项目托管在IIS下网站的根目录中。这正在运行表单例份验证。
第二个项目被托管为同一网站的虚拟目录。这正在运行Windows身份验证。
唯一的权衡是,您最终可能会获得/reports/reports/%的URL(或任何您将虚拟目录命名的名称)
关于ASP.NET MVC Urls和IIS集成Windows身份验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1007041/