Eu tenho o IE 11 e o Outlook 2013 no lado do cliente. No lado do servidor há centos7, apache 2.4 com auth_ntlm_winbind_module e winbindd. O URI do servidor ( link ) é adicionado aos "Sites locais" nas Opções / Segurança do Explorer.
O Apache é configurado para usar / pedir autenticação para um único URI (/sso.php) com um arquivo .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>
O problema é que, quando o IE ou o Outlook estão configurados para usar o SSO, eles ocasionalmente e aleatoriamente (com base na minha observação por uma proporção de 1: 10-20) enviam os dados de autorização ntlm com solicitações http não apenas para /sso.php , em vez de qualquer outro URIs também.
A saída ngrep para uma consulta http problemática:
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]
O problema é que quando eles fazem isso, eles não enviam os parâmetros POST com a solicitação http e os scripts do site retornam mensagens de erro. Contudo ao tentar novamente imediatamente, parece que funciona corretamente:
Não 'Autorização:' cabeçalho e dados POST apropriados enviados para o servidor da Web.
Uma consulta de postagem válida deve ser assim (observe a ausência da Autorização: cabeçalho e a presença do campo '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=
Então, a questão é como impedir que o IE 11 ou o Outlook 2013 envie as credenciais de autorização do ntlm para qualquer URI em cada 10 a 20 segundos em que o apache realmente não solicite isso? Ou como forçar o IE ou o Outlook a enviar os dados do POST, mesmo que enviem dados de autorização ntlm para o servidor da Web?
Obrigado por qualquer sugestão ou pista.