【发布时间】:2012-01-30 15:30:48
【问题描述】:
我们正在将过去在表单身份验证下运行的一些 Web 应用程序转换为现在作为 Windows 身份验证运行。我想重新创建表单身份验证所具有的页面安全性,而对实际页面的修改最少。我能够使用简化的网络应用程序重新创建我想要的效果。我在 Server 2008 R2 集成管道 IIS 7.5 上运行该应用程序。
我使用 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>
(如果我不尝试在 asp.net 级别重定向 401 错误,我只会得到标准的“未授权消息”,这不是我想要给我的用户的效果。)
但是,我收到了一个我不明白的错误 - 每次服务器重置时,应用程序都会停止工作。 IIS简单返回401错误,直到浏览器弹出手动登录控件,无法满足。 (我从不希望我的用户看到浏览器登录提示)
但是,如果我在设置应用程序后替换 httperrors 部分(通过编辑 Web 配置或使用服务器 GUI 更新它)删除该部分,访问该页面,然后重新添加该部分,应用程序开始按预期工作,并继续工作,直到服务器重新启动,此时它开始再次为用户提供手动登录弹出窗口,但他们无法解决。
1) 这是使用 Windows 身份验证保护应用程序的正确方法吗(有没有更好的方法来配置像表单一样无法访问的目录,但仍提供自定义错误页面?)
2) 这是集成管道的效果吗?为什么会这样?
【问题讨论】:
标签: asp.net iis iis-7.5 windows-authentication