Назад | Перейти на главную страницу

IIS и HttpListener (.NET) с проверкой подлинности Windows

У меня вопрос об аутентификации Windows с помощью IIS и HttpListener

У меня следующая установка (все установлено в одном окне с Windows 8.1. Никакой внешней связи). Все запросы отправляются как http: // localhost /......

IIS

Проверка подлинности веб-приложения ASP.Net

Anonymous: Disabled 
Windows Authentication: Enabled

.Net httpListener

работает как служба, запускается как локальная системная учетная запись и включена проверка подлинности Windows

this.httpListener = new HttpListener();
this.httpListener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication;

Приложение UWP (Windows 8.1)

Приложение UWP похоже на веб-браузер. Он имеет элемент управления WebView для просмотра веб-содержимого.

Включены следующие возможности

Проблема

Когда я перехожу из приложения uwp в веб-приложение IIS, оно запрашивает учетные данные, открывая диалоговое окно Windows. Это раздражает с точки зрения взаимодействия с пользователем, поскольку пользователь вошел в систему с теми же учетными данными. Но когда я получаю доступ к HttpListener, он аутентифицируется правильно, и никаких учетных данных не требуется.

Также проверял запросы через скрипач. Первоначальный запрос идентичен, но на следующих шагах для запроса IIS он постоянно запрашивает NTLM.

HTTP/1.1 401 Unauthorized
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.5
WWW-Authenticate: Negotiate oYHOMIHLoAMKAQGhDAYKKwYBBAGCNwICC........
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET

Первоначальный запрос / ответ

IIS

Запрос

GET http://localhost/webapp_net/ HTTP/1.1
Accept-Encoding: gzip, deflate
Host: localhost
Connection: Keep-Alive

отклик

HTTP/1.1 401 Unauthorized
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.5
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET,POST
Date: Tue, 20 Nov 2018 21:37:24 GMT
Content-Length: 6016
Proxy-Support: Session-Based-Authentication

HttpListener

Запрос

GET http://localhost/appman HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: en-NZ
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; WebView/2.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: localhost

отклик

HTTP/1.1 401 Unauthorized
Content-Length: 0
Server: Microsoft-HTTPAPI/2.0
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
Date: Tue, 20 Nov 2018 21:37:18 GMT
Proxy-Support: Session-Based-Authentication

У кого-нибудь есть подобный опыт или объяснение этому?

У меня есть объяснение: вы пытаетесь достичь единого входа (SSO), используя механизм согласования / встроенной проверки подлинности Windows. Сам по себе это не будет работать с локальным органом безопасности. Согласование пытается сначала использовать проверку подлинности Kerberos и возвращается к NTLM, если Kerberos не настроен. Kerberos - это механизм проверки подлинности Windows, для которого требуется Центр распространения ключей, который предоставляется Active Directory Microsoft для компьютеров, присоединенных к домену. Единый вход на сервер IIS с использованием встроенной проверки подлинности Windows может быть выполнен только с использованием протокола Kerberos. NTLM - это механизм аутентификации типа "запрос-ответ", который запрашивает учетные данные при каждом запросе.

Источники:

https://docs.microsoft.com/en-us/windows-server/security/windows-authentication/windows-logon-scenarios https://msdn.microsoft.com/en-us/library/cc247021.aspx