我将使用visual studio 2010创建的Web应用程序部署到具有IIS 6.0 Windows 2003的远程服务器。
尝试浏览网站时,会返回默认标题,并在页面正文中返回错误:
请求失败,HTTP状态为401:未经授权
现在我以管理员身份登录,并相应地设置了权限和目录安全性。
我尝试使用和不使用匿名访问进行检查,并且在两种情况下都收到了相同的错误。
它在我的本地开发环境中运行良好,应用程序的范围是在页面加载时使用report-viewer查看它返回的报表。
是否有人认为这与访问报表服务器有关,该服务器是对生产/托管服务器上的站点的不同服务器或本地访问?
我使用与托管/生产服务器不同的密码,而不是我的开发机器和报告服务器,但它应该包括我设置的域组中的任何人。
答案 0 :(得分:3)
几乎肯定是NTFS文件系统安全问题,您需要添加IUSR_<your machine name>
和ASPNET
(ASP.NET机器用户帐户),其中包含您的站点/应用程序所在文件夹的读取和执行权限。< / p>
答案 1 :(得分:1)
我想知道当你允许匿名访问时,你是否指定了在这种情况下使用的用户?如果是这样,该用户是否有权访问Web应用程序文件?如果您没有指定用户,则应该有一个名为“IIS_USR”的用户默认(我认为是Windows Server 2003)。您需要确保该用户有权访问您的应用程序目录。
答案 2 :(得分:0)
这是一个老问题,但是在微软安全补丁之后,昨天我们的内部应用程序突然出现了这个错误。
原因是我们在IIS上运行了一些网站,其应用池设置为在NetworkService
帐户下运行。在昨天之前,没问题,他们都工作得很好。但在补丁发布后,几乎所有用户都收到了“401 Unauthorized”错误。
有三种解决方案:
YOURCOMPUTERNAME\Users
有权访问此文件夹。是的,这是一个真实的帐户,我们怀疑Microsoft补丁实际上删除了这些权限。NetworkService
,但是,请再次确保将使用该网站执行的用户有权读取该网站的IIS文件夹中的文件。因此,我们有一个Active Directory组,其中包含将要使用此网站的用户,因此我们将此AD组添加到文件夹的“安全”选项卡中,并确保他们可以访问这些文件。同样,奇怪的是我们的网站在这个补丁之前工作得非常好。
而且,为了防止其他人在2017年遇到此问题,我还必须在我的函数中添加一行C#代码以使用“UseDefaultCredentials
”来调用Web服务。再次,在Microsoft补丁之前,这条线不存在,并且它运行良好。但是在补丁之后,我们会得到401错误,直到我添加了这一行。
public string CallWebService(string URL)
{
HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(URL);
objRequest.Method = "GET";
objRequest.KeepAlive = false;
objRequest.UseDefaultCredentials = true;
HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();
string result = "";
using (StreamReader sr = new StreamReader(objResponse.GetResponseStream()))
{
result = sr.ReadToEnd();
sr.Close();
}
return result;
}
希望这有帮助。