我创建了一个 asp.net 网站,可以通过在同一域上运行的客户端浏览器访问。
我已经在 IIS 7.5 上托管了该网站
我已从 IIS 部分下的功能视图中禁用匿名身份验证并启用 Windows 身份验证。
我已在站点的 web.config 中添加了以下内容:
<authorization>
<allow users="group\BizTalk Application Users" />
<deny users="?" />
</authorization>
当我在托管网站的服务器上运行时,我能够从浏览器打开网站。但是,如果我使用相同的凭据登录到同一域中的另一台服务器,当我尝试浏览该网站时,我会收到 http 403 错误。
在上述操作不奏效后,我尝试禁用网站的所有安全功能。我禁用了 Windows 身份验证并启用了匿名身份验证,但仍然出现相同的错误。我检查了服务器上的 IIS 日志,发现 403 的子代码是 18。
我在客户端上运行了 Fiddler 并看到以下请求/响应:
要求
GET http://tst-bts01/Vasanta.Int.SEOPSupportApp/Orders.aspx HTTP/1.1
Accept: image/jpeg, image/gif, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms- powerpoint, application/msword, */*
Accept-Language: en-GB
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: tst-bts01
回复
HTTP/1.1 403 Forbidden
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Tue, 29 Jan 2013 10:24:34 GMT
Content-Length: 0
我尝试过更改托管网站的应用程序池。我尝试过禁用对公司代理(isa 服务器)的调用,但现在我已经没有办法了。
谁能告诉我我做错了什么?
谢谢,罗布。
答案1
您需要读取网络服务器日志;默认情况下,这些日志存储在 中%SYSTEMDIR%\LogFiles\
。
与上述请求对应的行包括子状态错误代码除了 403 状态之外,这些代码是微软支持网站上有详细解释。
答案2
错误是 403.18。这似乎是因为我为授权失败设置了自定义错误消息。
答案3
继您的回复“这似乎是因为我为授权失败设置了自定义错误消息。”之后,我想分享一些类似的东西。我正在部署一个返回 403 错误的 VB.Net ASP webforms 应用程序。它在经典管道模式下运行良好,但在开发人员需要的集成模式下运行不正常。当我在 IIS 中关闭自定义错误(应用程序菜单上“错误页面”内的详细错误)时,它解决了这个问题,但这当然不是一个长期的解决方案,所以我不得不进一步调查……
我已经尝试确保.Net Framework 版本已安装、运行aspnet_regiis
,并检查应用程序池是否有权访问该文件夹等。
原来是开发人员在代码中设置了403错误代码,如下所示:
If (Not Me.Inst.User.IsLoggedIn) Then
Me._PageName = "You must be logged in"
' Some other Code Here
Else
Me._PageName = "Access Denied"
' Some other Code Here
End If
Me.Page.Response.StatusCode = 403
因此,无论用户是否未登录,或者他们的访问被拒绝,都会在响应中应用 403 状态代码。
我的理解是,在经典模式下这不是一个大问题,因为 ASP.Net 无法完全控制所有请求和响应,但在集成模式下却可以。因此,当“自定义错误”打开时,服务器会看到 403 并重定向到自定义页面,默认情况下,该页面就是我们一直看到的 403 页面。当打开详细错误显示时,它会寻找要显示的运行时异常,由于没有发生任何异常,因此它不会干扰。
因此,简单的解决方案是取出代码块的最后一行,或者将其放在 Else 块内。
答案4
可能的解决方案是在 IIS 上安装“ASP.NET v4.0”作为应用程序池。
ASP.NET v4.0
ASP.NET v4.0 经典版
要安装打开命令提示符(按 Windows + R 并输入 cmd,然后按 ENTER)。
键入 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319\ 并按 ENTER。
键入 aspnet_regiis.exe -ir,然后再次按 ENTER。
这将为您安装 .NET 的框架到 IIS 中。
安装成功后关闭命令提示符。
现在,您需要修改您的网站的应用程序池。
展开您的站点节点并找到您想要修改的站点(选择它)。
在右侧,您会注意到“编辑网站”文本下方的“基本设置...”。单击此按钮,将出现一个新窗口。
使用“选择…”按钮选择 .NET 4 应用程序池,然后单击“确定”。重新启动站点。