IIS 7.5 Web应用程序在使用HttpClient时返回Unauthorized

时间:2017-02-14 20:47:34

标签: c# asp.net iis windows-server-2008-r2 windows-security

我有一个Web应用程序,它托管在Windows Server 2008 R2上的IIS 7.5和Windows Server 2012 R2上的IIS 8.5中的另一台测试机器上。 Windows身份验证已启用,应用程序池在“DomainName \ DomainUsername”等服务帐户下运行。

我正在使用一个小型C#控制台测试应用程序来实例化HttpClient对象并调用网站的控制器操作,例如http://localhost/Api/TestAction。两个测试系统的行为都不同,我不明白为什么。

  • 测试用例1)没有凭据
  • 测试用例2),带有“默认凭据”
  • 测试用例3),其中包含apppool用户的凭据(“DomainName \ DomainUsername”)

TestCase 1:

HttpClient client = new HttpClient();
var response = client.GetAsync(url).Result;
Console.WriteLine(response.StatusCode); 

TestCase 2:

HttpClientHandler handler = new HttpClientHandler();
handler.UseDefaultCredentials = true;
HttpClient client = new HttpClient(handler);
var response = client.GetAsync(url).Result;
Console.WriteLine(response.StatusCode);

TestCase 3:

HttpClientHandler handler = new HttpClientHandler();
handler.Credentials = new NetworkCredential(username, password);
HttpClient client = new HttpClient(handler);
var response = client.GetAsync(url).Result;
Console.WriteLine(response.StatusCode);

结果如下:

Windows Server 2008 R2(IIS 7.5):

  • 测试案例1 - 未经授权
  • 测试案例2 - 确定
  • 测试案例3 - 未经授权

Windows Server 2012 R2(IIS 8.5):

  • 测试案例1 - 未经授权
  • 测试案例2 - 确定
  • 测试案例3 - 确定

您能否帮我理解为什么两个测试系统为测试案例3提供不同的结果(使用apppool用户的凭据)?您能否解释一下“UseDefaultCredentials”的含义以及这对授权问题有何影响?到目前为止,我还没有找到我理解的解释。

谢谢!

1 个答案:

答案 0 :(得分:1)

OP在下面的讨论中接受的答案涉及使用三个参数调用NetworkCredentials构造函数而不是两个,第三个是域名。

换句话说,这个工作

NetworkCredentials("Username", "Password", "Doamin")

这个人没有

NetworkCredentials("Domain\Username", "Password")