代码之家  ›  专栏  ›  技术社区  ›  Parrish Husband

使用httpclient授权AD组\用户

  •  0
  • Parrish Husband  · 技术社区  · 8 年前

    当我关闭匿名身份验证时,每当我试图从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,这是可行的,但在这种情况下,它实际上并没有对任何东西进行身份验证,对吗?

    *编辑:

    AS ADyson 指出,我的错误是没有正确初始化httpclient。以下是应该如何写的:

    var client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }); 
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   ADyson    8 年前

    UseDefaultCredentials = true HttpClientHandler HttpClient