У меня IE 11 и Outlook 2013 на стороне клиента. На стороне сервера есть centos7, apache 2.4 с auth_ntlm_winbind_module и winbindd. URI-адрес сервера (http://server.yourdomain.com) добавляется к "Локальным сайтам" в меню "Параметры" / "Безопасность".
Apache настроен на использование / запрос аутентификации для одного URI (/sso.php) с файлом .htaccess:
<IfModule auth_ntlm_winbind_module>
<FilesMatch "sso.php$">
AuthName "NTLM authentication"
NTLMAuth on
NTLMAuthHelper "/usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp"
NTLMBasicAuthoritative on
AuthType NTLM
require valid-user
</FilesMatch>
</IfModule>
Проблема заключается в том, что когда IE или Outlook настроены на использование единого входа, они время от времени и случайным образом (основываясь на моем наблюдении в соотношении 1:10-20) отправляют данные авторизации ntlm с http-запросами не только в /sso.php, а скорее в любые другие URI, а также.
Вывод ngrep для проблемного http-запроса:
T 1.2.3.4:49229 -> 1.2.3.5:80 [AP]
POST /message.php HTTP/1.1..Accept: */*..Content-Type: app
lication/x-www-form-urlencoded; charset=UTF-8..X-Roundcube
-Request: undefined..X-Requested-With: XMLHttpRequest..Ref
erer: search.php..Accept-Language:
hu,en-US;q=0.7,en;q=0.3..Accept-Encoding: gzip, deflate..U
ser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6
.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; Microsoft Outl
ook 15.0.4420)..Host: SERVER..Content-Length: 0..
Connection: Keep-Alive..Cache-Control: no-cache..Cookie: s
plitter2=421; PHPSESSID=38jo8vdmvvfotqhivffsocgif3..Author
ization: NTLM TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAG
A4AlAAAADw==....
#
T 1.2.3.5:80 -> 1.2.3.4:49229 [AP]
HTTP/1.1 200 OK..Date: Mon, 15 Sep 2014 08:52:50 GMT..Serv
er: Apache/2.4.6 (CentOS) PHP/5.4.16..X-Powered-By: PHP/5.
4.16..Expires: Thu, 19 Nov 1981 08:52:00 GMT..Cache-Contro
l: no-store, no-cache, must-revalidate, post-check=0, pre-
check=0..Pragma: no-cache..Content-Length: 42..Keep-Alive:
timeout=5, max=100..Connection: Keep-Alive..Content-Type:
text/html; charset=UTF-8.....invalid id:
#
T 1.2.3.4:49229 -> 1.2.3.5:80 [A]
Проблема в том, что когда они делают это, им не удается отправить параметры POST с запросом http, а сценарии веб-сайта возвращают сообщения об ошибках. Однако при повторной попытке сразу же кажется, что все работает правильно:
Нет заголовка «Авторизация:» и правильных данных POST, отправленных на веб-сервер.
Действительный пост-запрос должен выглядеть следующим образом (обратите внимание на отсутствие заголовка Authorization: и наличие поля 'id'):
T 1.2.3.4:49229 -> 1.2.3.5:80 [AP]
POST /message.php HTTP/1.1..Accept: */*..Content-Type: app
lication/x-www-form-urlencoded; charset=UTF-8..X-Roundcube
-Request: undefined..X-Requested-With: XMLHttpRequest..Ref
erer: search.php..Accept-Language:
hu,en-US;q=0.7,en;q=0.3..Accept-Encoding: gzip, deflate..U
ser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6
.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; Microsoft Outl
ook 15.0.4420)..Host: SZERVER..Content-Length: 15.
.Connection: Keep-Alive..Cache-Control: no-cache..Cookie:
splitter2=421; PHPSESSID=38jo8vdmvvfotqhivffsocgif3....
#
T 1.2.3.4:49229 -> 1.2.3.5:80 [AP]
id=4992&search=
Таким образом, вопрос заключается в том, как запретить IE 11 или Outlook 2013 отправлять учетные данные авторизации ntlm на любые URI каждые 10-20 секунд, когда apache фактически не запрашивает это? Или как заставить IE или Outlook отправлять данные POST, даже если они отправляют данные авторизации ntlm на веб-сервер?
Спасибо за любые подсказки или подсказки.