当我关闭匿名身份验证时,尝试从HttpClient收到响应时,都会收到401错误。
StatusCode: 401, ReasonPhrase: 'Unauthorized', Version: 1.1,
Content: System.Net.Http.StreamContent, Headers:
{
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcUGFycmlzaFxEb2N1bWVudHNcJ0xSXFNvdXJjZVxBcHBzXExSUiBBRkVcTFJSX0FGLVxhcGlcYWZlXDg0QTk0NjVFQzg2QTQwQjNBNEJCNkJDOTI3MTFGRjNB?=
Cache-Control: private
Server: Microsoft-IIS/10.0
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET
Date: Mon, 27 Aug 2018 18:14:05 GMT
Content-Length: 6166
Content-Type: text/html; charset=utf-8
}
为了进行测试,我让控制器在单个用户上进行身份验证。
[Authorize(Users = @"Domain\Username")]
public class ExampleController : Controller
{
public async Task<ActionResult> Index(string exampleId)
{
var baseUrl = $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Content("~")}";
var client = new HttpClient(); // <-- This is WRONG*
var response = await client.GetAsync($"{baseUrl}api/example/{exampleId}");
var example = await response.Content.ReadAsAsync<ExampleModel>();
return View(example);
}
}
我已经研究过使用HttpClient.DefaultRequestHeaders.Authentication
,但没有找到一种使其与ActiveDirectory一起使用的方法。我看过here,但不知道在这种情况下我将在哪里获得授权令牌。
如果我手动创建一个新的控制器并直接调用它而不是通过API来运行,那么它可以工作,但是在这种情况下,它真的不能对任何东西进行身份验证吗?
*编辑:
正如ADyson所指出的那样,我的错误未正确初始化HttpClient。这是应该如何写的:
var client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true });
答案 0 :(得分:1)
您需要设置UseDefaultCredentials = true
(在HttpClientHandler
的实例中,您将其传递给HttpClient
)。