Авторизация группы AD \ пользователя с помощью HttpClient - PullRequest
0 голосов
/ 27 августа 2018

Я получаю ошибку 401 всякий раз, когда пытаюсь получить ответ от HttpClient, когда отключаю анонимную аутентификацию.

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, это работает, но в этом случае он действительно ничего не аутентифицирует, верно?

* Edit:

Как указывает ADyson , моя ошибка не состояла в правильной инициализации HttpClient. Вот как это должно было быть написано:

var client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }); 

1 Ответ

0 голосов
/ 27 августа 2018

Вам необходимо установить UseDefaultCredentials = true (в случае HttpClientHandler, который вы передаете HttpClient).

...