Asp.net mvc ASP.Net MVC应用程序-授权在暂存服务器上的执行方式不同

Asp.net mvc ASP.Net MVC应用程序-授权在暂存服务器上的执行方式不同,asp.net-mvc,windows-authentication,Asp.net Mvc,Windows Authentication,我们正在开发一个ASP.Net MVC intranet风格的应用程序,并试图利用windows身份验证,因为绝大多数用户都是内部用户,并且预先通过了本地域的身份验证 身份验证是以相当标准的方式实现的,除了我们选择存储在数据库中的角色信息。我们以两种不同的方式实现了这一点:custom RoleProvider和override Context.User-IsInRole,这两种方式都满足要求,并且在IIS Express和本地IIS服务器上托管的开发环境中正常工作 问题是,一旦我们将应用程序移

我们正在开发一个ASP.Net MVC intranet风格的应用程序,并试图利用windows身份验证,因为绝大多数用户都是内部用户,并且预先通过了本地域的身份验证

身份验证是以相当标准的方式实现的,除了我们选择存储在数据库中的角色信息。我们以两种不同的方式实现了这一点:custom RoleProvider和override Context.User-IsInRole,这两种方式都满足要求,并且在IIS Express和本地IIS服务器上托管的开发环境中正常工作

问题是,一旦我们将应用程序移动到仍然位于同一本地网络/域名上的登台环境中,两种身份验证方法都不起作用。这两种方法似乎都被忽略,由windows身份验证角色提供程序接管

为了演示这一点,我在主页/索引页中有一段代码,其中列举了windows域组,并测试了每个域组的User.IsInRole,以及自定义角色User.IsInRoleUsers。在开发环境下,每个Windows组返回false,而自定义角色返回true。在登台环境下,情况正好相反

我对实现预期结果的任何一种方法都很满意,因此我想知道为什么以下两种方法都不起作用

自定义角色提供程序未生效

Global.asax应用程序\u AuthenticateRequest事件从不激发,因此不使用具有重写的IsInRole方法的自定义用户对象

受保护的无效应用程序\u AuthenticateRequest对象发送方,事件参数e { 如果Context.User!=null Context.User=new UserPrincipalContext.User.Identity; }

服务器2008、IIS 7、MVC 5.1


提前感谢。

问题是我按照建议从我的应用程序的web.config的模块部分删除runAllManagedModulesForAllRequests=true,但是这导致相关应用程序事件停止触发,因为模块未注册

请参阅此处的文章,以及评论中有关此问题的更多信息。


替换runAllManagedModulesForAllRequests=true属性现在已经解决了这个问题,但是我正在尝试安装MS提供的修补程序,上面提到的修补程序是为了消除对该模块和/或手动注册模块的依赖。

IIS必须配置为允许某些身份验证类型集成、Windows、窗体、匿名、,当IIS从服务器管理器添加到计算机时,默认情况下不会安装etc和其中一些。如果站点在IIS级别配置不正确,您将看到一些奇怪的情况。当前:匿名身份验证、ASP.NET模拟、基本、摘要、表单-全部禁用。Windows身份验证已启用。此外,如果AuthenticateRequest没有在IIS上正确启动,我也不会感到惊讶,在使用Windows身份验证时,IIS执行所有身份验证,而不是应用程序在管道中更快地执行。如果将该代码移动到应用程序\u BeginRequest,会发生什么情况?将该代码推入\u BR会中断本地调试IIS Express下的身份验证,并给出401身份验证提示。针对域组和远程IIS的本地IIS身份验证保持不变。实际上,我认为为了实现这一目的而重写用户对象已经太迟了。