我已经尝试了几天来获取我的MVC5应用程序(在带有iis7的Windows 2008r2上部署)来返回401的控制器。我希望能够使用此自定义控制器从服务器检索有关联系人详细信息的信息获得用户并访问该应用程序。此服务器活动目录与用户不同,但他们可以访问Web应用程序的该服务器。
注意:在IIS内置的VS2013上进行测试(也可以在2008r2服务器上进行测试)
我的应用程序有主页控制器和 AccessDenied 控制器:
家庭控制器有自定义[授权] ,因为我实施了自己的 在Windows身份验证之上的第二级身份验证。
我的 [CustomAuthorize] 检查用户是否有效且是否为真然后
检查我的数据库(用作特定用户的白名单)
如果用户不在白名单中,则返回false
在活动目录中无效。
用户使用内置的弹出窗口登录以输入凭据(chrome)
如果他们输入正确,但他们不在白名单,他们就是 重定向到AccessDenied 控制器
然而如果用户点击取消,或连续输入无效 服务器响应内置的 IIS 401.1,401.2或 401错误
我的初始system.web和system.webserver :
<system.web>
<customErrors mode="On" >
<error statusCode="401" redirect="\AccessDenied" />
</customErrors>
<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" />
<authentication mode="Windows" />
<authorization>
<!-- <deny users="?" />-->
</authorization>
<httpModules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</httpModules>
<httpHandlers>
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="FormsAuthenticationModule" />
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
结果:
我试过了
附加问题: 是否可以允许一个控制器的匿名身份验证,但使用Windows身份验证另一个?因为我的访问控制器也在进行授权(即使没有授权属性)