MVC5 IIS7使用控制器/视图作为401错误

时间:2014-05-19 13:46:23

标签: c# asp.net-mvc iis windows-authentication custom-error-pages

我已经尝试了几天来获取我的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>

结果:

  • 用户有效(不在白名单中):访问被拒绝控制器
  • 用户有效(在白名单中):家庭控制器
  • 用户取消/错误凭据:401.2

我试过了

  • HttpError标记
  • [AnonymousAuthorize]
  • 具体使用匿名身份验证(仍然提示登录)

附加问题: 是否可以允许一个控制器的匿名身份验证,但使用Windows身份验证另一个?因为我的访问控制器也在进行授权(即使没有授权属性)

0 个答案:

没有答案