【问题标题】:Authorizing AD Group\User With HttpClient使用 HttpClient 授权 AD 组\用户
【发布时间】:2018-08-27 18:20:06
【问题描述】:

当我关闭匿名身份验证时尝试从 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 }); 

【问题讨论】:

  • 请向我们展示您如何使用 HttpClient。我认为,您很可能希望根据记忆设置 UseDefaultCredentials = true
  • 是的,这行得通。我更新了控制器以使用 HttpClientHandler 实例化 HttpClient 并且它通过了。我知道我错过了一些东西。创建这个作为答案。

标签: c# asp.net-mvc kerberos windows-authentication unauthorized


【解决方案1】:

您需要设置UseDefaultCredentials = true(在HttpClientHandler 的实例中,您将其传递给HttpClient)。

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 2022-11-05
    • 1970-01-01
    相关资源
    最近更新 更多