Puis-je indiquer aux clients que SPNEGO est pris en charge mais que NTLM ne convient pas aux requêtes HTTP?
-
20-08-2019 - |
Question
Les deux ajouts WWW-Authenticate que Microsoft utilise sont ceux que je connais actuellement
- NTLM
- Négocier
Si Negotiate est envoyé depuis le serveur, Kerberos sera utilisé en fonction d'un ensemble de conditions
- Zone Intranet
- Accéder au serveur en utilisant un nom d'hôte plutôt que IP
- L’authentification Windows intégrée dans IE est activée, l’hôte est approuvé dans Firefox
- Le serveur n'est pas local sur le navigateur
- Le système Kerberos du client est authentifié auprès d'un contrôleur de domaine
Ensuite, Kerberos sera tenté entre le serveur et le client. Si quelque chose de précédent n'est pas respecté, NTLM sera tenté.
Ma question est la suivante: le serveur a-t-il un moyen d'indiquer que NTLM ne doit pas être envoyé? Je gère actuellement cela en gardant une trace de la demande dans la session et si un message NTLM est reçu, il désactive Kerberos et WWW-Authenticate pour le reste de la vie de cette session.
La solution
L'en-tête WWW-Authenticate
initial spécifie uniquement negotiate
. Elle ne peut rien dire de plus, comme & "Pas de NTLM &"; .
Je pense qu'il est possible de répondre au premier en-tête Authenticate: {Base64 NTLMSSP} envoyé par le client avec 401 unauthorized
et à un deuxième Negotiate
en-tête, qui peut inclure un jeton de réponse, comprenant éventuellement un SupportedMechanisms
qui spécifie Kerberos uniquement.
Mais je soupçonne que cela ne vous concernera que "unauthorized"
, car il s’agissait au départ de NTLM.
Autres conseils
Oui, vous le pouvez. Consultez la documentation de référence du projet de filtre de servlets HTTP SPNEGO.
Vous pouvez le faire (du moins en théorie), oui. IE peut faire des choses totalement étranges, comme envoyer des jetons Kerberos sans l’encapsulation ASN.1 appropriée, mais bon, c’est un sujet différent. Dans un SPNEGO conforme ( http://tools.ietf.org/html/rfc4178#section -4.1 ) Vous pouvez le faire.
Si vous pouvez manipuler le membre mechTypes de NegTokenInit pour ne contenir que Kerberos, il oblige le client à envoyer Kerberos ou à ne pas s'authentifier.