自定义ASP.NET中的IIS 401页面

4

我有一个面向互联网的ASP.NET网站,我想通过Windows身份验证来保护它。我将我的web.config文件设置为:

<system.web>
 <authentication mode="Windows" />
 <authorization>
    <allow users="*"/>
    <deny users="?"/>        
 </authorization>

我已经在IIS 7.5中禁用了匿名访问并启用了Windows身份验证。

这会导致出现提示框,要求输入Windows凭据,但是如果点击“取消”,就会显示标准的401错误页面。我想显示一个静态的HTML文件来代替这个消息,但是我试过各种设置的组合,都没有成功:

<httpErrors errorMode="Custom" existingResponse="Replace" lockAllAttributesExcept="errorMode"> <error statusCode="401" prefixLanguageFilePath="c:\inetpub\custerr" path="MyCustom401.htm" /> </httpErrors>

并且

<customErrors mode="Off" defaultRedirect="ErrorPage.aspx">
    <error statusCode="401" redirect="MyCustom401.aspx" />
</customErrors>

我希望的是,任何输入正确Windows凭据的人都可以正常访问网站,但那些无效或需要查看自定义HTML页面的人则不能进入。

有人能指点我正确的方向吗?

谢谢!


1
Web浏览器通常会显示它们自己的错误页面版本,那么您真的想要更改IIS的错误页面吗? - Lex Li
1
我想向用户展示一个自定义页面,其中将提供有关如何获取有效凭据以便能够登录网站的说明。因此,是的,我希望能够覆盖他们看到的错误页面。 - ca8msm
1
这是不可能的,因为Web浏览器端设置具有最高优先级。您必须重定向到特定页面并返回200响应代码,而不是401。 - Lex Li
1个回答

4

需要确保的一件事情是允许匿名用户访问包含错误文件的路径,否则他们将无法得到错误页面。举个例子,这是一个配置文件,如果您的错误文件在一个目录(errors)中,应该会给您预期的结果。首先它禁用了所有站点的匿名访问,但随后为"errors"文件夹打开了访问权限:

<configuration>
    <system.webServer>
        <security>
            <authorization>
                <add accessType="Deny" users="?" />
            </authorization>
        </security>
        <httpErrors errorMode="Custom">
            <error statusCode="401" subStatusCode="2" path="/errors/unauthorized.aspx" responseMode="ExecuteURL" />
        </httpErrors>
    </system.webServer>

    <location path="errors">
        <system.webServer>
            <security>
                <authorization>
                    <clear />
                    <add accessType="Allow" users="*" />
                </authorization>
            </security>
        </system.webServer>
    </location>
</configuration>

当启用Windows身份验证(SSO)时,这个不起作用。它会破坏SSO并且不会要求进行身份验证,而是直接显示401页面。 - rboy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接