2015-12-03 2 views
2

Я работаю над приложением Windows 10 UWP, которому необходимо поговорить с сервером IIS с использованием проверки подлинности NTLM. Я устанавливаю имя пользователя и пароль в HttpBaseProtocolFilter:Проверка подлинности NTLM с использованием Windows.Web.Http.HttpClient

filter.ServerCredential = new PasswordCredential(uri, UserName, Password);

Когда я просмотреть запрос в стельку, он использует Basic Auth. Есть ли что-нибудь, что я могу сделать, чтобы заставить его использовать NTLM, который требуется серверу?


Заголовки запросов:

Content-Length: 1459 
Content-Type: text/xml; charset=utf-8 
Host: server 
Connection: Keep-Alive 
Cache-Control: no-cache 
Cookie: ClientId=XXXXXXXXX 
Authorization: Basic XXXXXXXXX 

Заголовки ответов:

HTTP/1.1 401 Anonymous Request Disallowed 
Server: Microsoft-IIS/8.5 
request-id: xxxxx 
WWW-Authenticate: NTLM 
WWW-Authenticate: Negotiate 
X-Powered-By: ASP.NET 
X-FEServer: XXXXXXX 
Date: Thu, 03 Dec 2015 16:12:58 GMT 
Content-Length: 0 
Proxy-Support: Session-Based-Authentication 
+0

Ваш код работает для меня с NTLM. Можете ли вы опубликовать предыдущие запросы и ответы Fiddler? – kiewic

+0

Одна нота: я устанавливаю имя пользователя для учетных данных пароля в форме: '{domain} \ {username}' –

ответ

1

Короткий ответ: NTLM аутентификации работает с именем пользователя/пароль. Необходимо повторить подключение во второй раз, потому что HttpClient предварительно отправляет BASIC auth, когда сервер хочет NTLM

Длинный ответ: мое приложение связывается с двумя службами, размещенными на том же сервере. Первый позволяет Basic auth, а второй разрешает только NTLM. Сначала я подключился к базовой службе auth, а затем подключился к NTLM. Я бы предположил, что HttpClient автоматически выполнил бы повторную попытку с NTLM, когда он получил заголовок WWW-Authenticate: NTLM, но, похоже, он этого не делает. Однако, если я вручную повторю подключение, то второй раз HttpClient выполнит NTLM-аутентификацию.

Смежные вопросы