Как получить полный заголовок WWW-Authenticate, используя Dot-NET HttpClient?

сценарий

Я работаю над веб-программой для Windows Phone 8 (не думаю, что это важно) и использую клиентские библиотеки Microsoft HTTP.

Эта проблема

Когда пользователь пытается получить URL-адрес, мне нужно знать, какой тип аутентификации требуется, когда ответом является 401. Это очень легко, если это NTLM, Basic, Digest и т. Д.; все поддерживаемые схемы WinHTTP. Вы можете использовать следующий код для получения URL:

HttpResponseMessage response;
using (var httpClient = new HttpClient(httpHandler))
{
     HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, authenticationUri);
     response = await httpClient.SendAsync(request, _cancelTokenSource.Token);
}

Самый простой способ проверить, какая аутентификация необходима, это использовать Headers.WwwAuthenticate.Contains метод, например, чтобы проверить, если NTLM Схема обязательна:

string scheme = "NTLM";
bool requiredScheme = response.Headers.WwwAuthenticate.Contains(new System.Net.Http.Headers.AuthenticationHeaderValue(scheme));

Если scheme = "Bearer" тогда это всегда дает ложь.

Получение заголовка ответа

Следующее было получено при попытке получить доступ к серверу, который нуждается Azure Active Directory аутентификация.

Приложение Jason Chrome

Используя приложение Jason Chrome для получения заголовков ответов от веб-сервера, я получил:

Pragma: no-cache
Date: Fri, 10 Oct 2014 11:39:02 GMT
WWW-Authenticate: Bearer authorization_uri="https://login.windows.net/common",
    error="invalid_token", 
    error_description="The access token is missing", 
    NTLM
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Expires: -1
Cache-Control: no-cache
Content-Length: 0
X-UA-Compatible: IE=EmulateIE7

Dot-Net Http Client

Используя HttpClient System.Net.Http.HttpResponseMessage (response) дает:

StatusCode: 401, ReasonPhrase: 'Unauthorized', Version: 0.0, Content: System.Net.Http.StreamContent, Headers:
    {
      Server: Microsoft-IIS/7.5
      WWW-Authenticate: NTLM
      X-Powered-By: ASP.NET
      X-UA-Compatible: IE=EmulateIE7
      Date: Fri, 10 Oct 2014 11:25:04 GMT
      Content-Length: 1293
      Content-Type: text/html
    }

WWW-Аутентификация Сравнение

Из приведенных выше результатов можно сделать следующее сравнение.

Приложение Jason Chrome

Bearer authorization_uri="https://login.windows.net/common", error="invalid_token", error_description="Маркер доступа отсутствует",

NTLM

Dot-Net Http Client

NTLM

Часть Bearer выбрасывается Http-клиентом (или, возможно, это ограничение HttpResponseMessage) и остается только аутентификация NTLM.

Вопрос

Как или где я могу получить полный заголовок WWW-Authenticate, используя Dot-NET HttpClient, который показывает все схемы с их содержимым? Этот пример специфичен для Bearer; однако существуют и другие (пользовательские) схемы.

Есть идеи?


дополнительный

Эта же проблема, кажется, сохраняется даже на Windows.Web.Http.HttpClient

0 ответов

Другие вопросы по тегам