c# - 使用 HttpClient 授权 AD 组\用户
问题描述
每当我在关闭匿名身份验证时尝试从 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 一起工作的方法。我看过这里,但不明白在这种情况下我会在哪里获得授权令牌。
如果我手动创建一个新控制器并直接调用它而不是通过 API 调用它,那么它可以工作,但在这种情况下它真的没有验证任何东西,对吧?
*编辑:
正如ADyson指出的那样,我的错误是没有正确初始化 HttpClient。这是它应该是这样写的:
var client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true });
解决方案
您需要设置(在您传递给 的UseDefaultCredentials = true
实例中)。HttpClientHandler
HttpClient
推荐阅读
- c++ - Borland 5.5 C++ Ifstream 0xC0000005
- pandas - 如何在 Pandas 数据框中创建时间步长?
- python - Webscraping 结果转换为 DataFram 并删除 \xa0
- c# - c# .Net Core 3.1 Azure App Service Windows - 应用程序无法检索应用程序设置
- python - pip 在哪里安装文件?
- python - 如何查找列表中所有唯一元素的所有索引
- nginx - nginx config http block ip地址传入请求监听ip
- python - 将单索引数据帧连接到多索引数据帧
- r - 我如何从 30 个 csv 文件(每个 1 个问题)中选择多项选择题并将它们组合成一组学生?(使用 R)
- python - 在多对一/多上使用合并