2012-01-30 172 views
5

我们正在将一些用于在表单身份验证下运行的Web应用程序转换为现在作为Windows身份验证运行。我想通过对实际页面的最小修改来重新创建表单身份验证的页面安全性。我能够通过简化的网络应用程序重新创建我想要的效果。我正在运行Server 2008 R2集成管道IIS 7.5上的应用程序。将Windows身份验证重定向到自定义401页面

我使用Windows身份验证创建了一个简单的3页应用程序。这三个页面:

  • Openpage.aspx,这是开放给任何身份验证的用户
  • Blockedpage.aspx被阻止所有用户(象征性的目录或网页,将被阻止用户的一个子集基于用户角色)
  • ErrorPage.aspx,如果blockedpage.aspx被访问(并被拒绝),应用程序应该转发到ErrorPage.aspx,其中用户获取有关应用程序的通用信息。

的应用程序的Web.config:

<configuration> 
    <system.web> 
     <compilation debug="true" targetFramework="4.0" /> 
     <authentication mode="Windows"/> 
     <authorization> 
     <deny users="?" /> 
     <allow users="*" /> 
     </authorization> 
    </system.web> 
    <location path="blockedpage.aspx"> 
    <system.web> 
     <authorization> 
     <deny users="*"/> 
     </authorization> 
    </system.web> 
    </location> 
    <system.webServer> 
    <httpErrors errorMode="Custom" > 
     <remove statusCode="401" subStatusCode="-1" /> 
     <error statusCode="401" path="/development/simplesecurityapp/errorpage.aspx" responseMode="ExecuteURL" /> 
    </httpErrors> 

    <validation validateIntegratedModeConfiguration="false" /> 
    <defaultDocument> 
     <files> 
     <clear /> 
     <add value="openpage.aspx" /> 
     </files> 
    </defaultDocument> 
    </system.webServer> 

</configuration> 

(如果我不尝试在401错误在asp.net水平重定向,我只是得到标准的“未授权信息”这不是我想给我的用户的效果。)

但是,我收到一个错误,我不明白 - 每次服务器重置,应用程序停止工作。 IIS只会返回401个错误,直到浏览器弹出手动登录控制,但无法满足。 (我从来不希望我的用户会看到浏览器登录提示)

但是,如果我在应用程序设置完成后替换httperrors节(通过编辑web配置或使用服务器GUI更新它)删除该部分,访问该页面,然后将该部分添加回来,应用程序开始按预期工作,并且一直持续到服务器重新启动,此时它会再次向用户提供手动登录弹出窗口,他们无法解决。

1)这是为了确保与Windows身份验证的应用程序(正确的做法是有没有更好的办法来配置人迹罕至像表单目录,但仍提供自定义错误页?)

2)这是集成管道的影响以及为什么它以这种方式工作?

回答

1

您试图通过传输错误消息提供内容。

Forms允许你这样做,因为它由7层的东西组成,比如302s和200s。 401s被客户端浏览器解释为“服务器不喜欢我的凭据,因此提出一个对话框来询问新的”。

经过身份验证的页面至少生成1 401个以便通过身份验证;你为其他东西重载“错误”可能是问题的根源。

我不知道有一个优雅的方式做你想做的。

相关问题