У меня вопрос об аутентификации Windows с помощью IIS и HttpListener
У меня следующая установка (все установлено в одном окне с Windows 8.1. Никакой внешней связи). Все запросы отправляются как http: // localhost /......
Проверка подлинности веб-приложения ASP.Net
Anonymous: Disabled
Windows Authentication: Enabled
работает как служба, запускается как локальная системная учетная запись и включена проверка подлинности Windows
this.httpListener = new HttpListener();
this.httpListener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication;
Приложение 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
Первоначальный запрос / ответ
Запрос
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
Запрос
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