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
У кого-нибудь есть подобный опыт или объяснение этому?
1 ответ
У меня есть объяснение этому: вы пытаетесь добиться единого входа (SSO) с помощью механизма согласования / встроенной проверки подлинности Windows. Это не будет работать с местным органом безопасности самостоятельно. Согласовать попытки сначала использовать проверку подлинности Kerberos и возвращается к NTLM, если Kerberos не настроен. Kerberos - это механизм проверки подлинности Windows, для которого требуется Центр распространения ключей, предоставляемый Microsoft Active Directory для компьютеров, подключенных к домену. Единый вход на сервер 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