一般信息
操作系统:Windows Server 2003 R2 Service Pack 2
网络服务器:IIS 6
NTAuthenticationProviders :仅限NTLM
Web应用:经典ASP
浏览器使用:IE7,IE8,IE9
在一个名为 eblcplaza 的IIS网站中有一个名为 knowledgebase 的经典ASP网络应用程序,如下所示:eblcplaza / knowledgebase /。
eblcplaza启用了匿名访问和集成Windows身份验证。 知识库禁用匿名访问并启用集成Windows身份验证
知识库是一个经典ASP应用程序有自己的应用程序池,它在预定义的应用程序池标识“网络服务”下运行当我使用我的NT帐户登录时,我可以访问任何我想要的页面。问题出在WinHttp.WinHttpRequest.5.1组件上。它在知识库的某些部分中用于执行服务器端请求,以从驻留在Web应用程序中的某些.asp脚本中检索内容。
在知识库中关闭匿名访问时,问题就开始了。 注意,重新打开它不是一个选项。
使用WinHttpRequest的请求示例:
set WinHTTPRequest = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
WinHTTPRequest.SetTimeouts 20000, 20000, 20000, 20000
call WinHTTPRequest.Open("POST", someUrlToAspScript, false)
WinHTTPRequest.SetAutoLogonPolicy 0
WinHTTPRequest.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
WinHTTPRequest.Send strQueryString
Response.Write(WinHTTPRequest.ResponseText)
将SetAutoLoginPolicy设置为0,我在使用WinHttpRequest的页面上收到以下错误消息:
您无权使用您提供的凭据查看此目录或页面。 HTTP错误401.1 - 未经授权:由于凭据无效,访问被拒绝。 Internet信息服务(IIS)
将SetAutoLoginPolicy设置为2(不根据MSDN自动发送用户凭据),我在使用WinHttpRequest的页面上收到以下错误消息:
您无权使用您提供的凭据查看此目录或页面,因为您的Web浏览器正在发送Web服务器未配置为接受的WWW-Authenticate标头字段。 HTTP错误401.2 - 未经授权:由于服务器配置,访问被拒绝。
我知道我的NT用户帐户有权访问这些.asp脚本,网络服务帐户也是如此。
我试着找出问题可能已经好几天知道了,尝试将NTAuthenticationProviders设置为仅NTLM以及Negotiate和NTLM等等,但到目前为止没有任何工作。
请帮助我,它开始让我发疯。
此致
巴特
答案 0 :(得分:0)
我猜知识库中的页面是使用匿名帐户访问的,您可以从eblcplaza开始。尝试仅在您使用请求的eblcplaza页面上启用NTLM,您只能在该文件上执行此操作。就像你的凭据传递给知识库一样。在两个页面上都记录会话(“用户名”)变量。
答案 1 :(得分:0)
首先让我们清楚一下你要求服务器做什么。它将要求客户提供您的凭据,以便出于安全目的而冒充您的身份。它正在向服务发出的WinHTTP请求(WinHTTP不知道它是完全相同的应用程序)现在需要凭据。您希望此模拟线程执行的操作是使用您的信用卡对“外部”服务进行身份验证。
我怀疑这里发生的事情是服务器无法以这种方式重新使用您的凭据。如果我没记错(可能不是那么确定),服务器需要被授予委派权以便这样做。如果使用Kerberos而不是NTLM来执行Windows集成安全性,也可以允许这样做。
然而,所有这些都可能是学术性的。你应该明白,一个向自己发出http请求的应用程序有可能在加载时以一种需要循环释放的方式挂起。
考虑这个选择。鉴于ServicePage.asp是浏览器和内部ClientPage.asp直接使用的页面,请执行以下操作。
从ServicePage.asp中删除服务代码,并将其放在新的ServiceInclude.asp中的VBScript类中。现在将此ServiceInclude.asp添加为ServicePage.asp中的包含文件,其中ServicePage.asp仅包含实例化类所需的管道并使用它来生成其输出。
修改ClientPage.asp,以便不是尝试WinHttp到ServicePage.asp,而是简单地包含ServiceInclude.asp,实例包含的类并使用该类来提供所需的服务。