部署的Web应用程序返回 - 401未授权

时间:2011-06-02 18:31:12

标签: asp.net visual-studio-2010 web-applications iis-6

我将使用visual studio 2010创建的Web应用程序部署到具有IIS 6.0 Windows 2003的远程服务器。

尝试浏览网站时,会返回默认标题,并在页面正文中返回错误:

  

请求失败,HTTP状态为401:未经授权

现在我以管理员身份登录,并相应地设置了权限和目录安全性。

我尝试使用和不使用匿名访问进行检查,并且在两种情况下都收到了相同的错误。

它在我的本地开发环境中运行良好,应用程序的范围是在页面加载时使用report-viewer查看它返回的报表。

是否有人认为这与访问报表服务器有关,该服务器是对生产/托管服务器上的站点的不同服务器或本地访问?

我使用与托管/生产服务器不同的密码,而不是我的开发机器和报告服务器,但它应该包括我设置的域组中的任何人。

3 个答案:

答案 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”错误。

有三种解决方案:

  • 将网站更改为在“真实”用户的帐户下运行,并确保该用户 有权读取该网站的IIS文件夹中的文件。换句话说,右键单击该文件夹,选择“安全”选项卡,然后为该用户添加权限。
  • 更改网站文件夹的权限,并确保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;
}

希望这有帮助。