Il y a 3 protocoles d'authentification qui peut être utilisé pour effectuer l'authentification entre Java et Active Directory sur Linux ou sur toute autre plate-forme (et ce ne sont pas seulement spécifique pour les services HTTP):
Kerberos Kerberos fournit l'authentification Unique (SSO) et de la délégation, mais les serveurs web doivent également SPNEGO soutien à accepter l'authentification unique par IE.
NTLM - NTLM prend en charge l'authentification unique par IE (et les autres navigateurs si elles sont correctement configurés).
LDAP LDAP bind peut être utilisé pour simplement valider un nom de compte et mot de passe.
Il y a aussi quelque chose appelé "ADF", qui fournit l'authentification unique pour les sites web à l'aide de SAML qui appelle le Windows SSP donc, dans la pratique, c'est essentiellement une façon détournée de l'aide de l'un de l'autre au-dessus des protocoles.
Chaque protocole a ses avantages, mais comme une règle du pouce, pour un maximum de compatibilité, vous devez généralement tenter de "faire en tant que Windows n'". Donc, ce n'est Windows?
Tout d'abord, l'authentification entre les deux machines Windows favorise Kerberos car les serveurs n'ont pas besoin de communiquer avec le contrôleur de domaine et les clients peuvent mettre en cache les tickets Kerberos qui réduit la charge sur le DCs (et parce que Kerberos prend en charge la délégation).
Mais si l'authentification des parties ne sont pas tous les deux ont des comptes de domaine ou si le client ne peut pas communiquer avec le contrôleur de domaine, NTLM est nécessaire. Si Kerberos et NTLM ne sont pas mutuellement exclusives et NTLM n'est pas rendu obsolète par Kerberos. En fait, à certains égards, NTLM est mieux que Kerberos. Notez que lorsque vous mentionnez Kerberos et NTLM dans le même souffle, je dois aussi mentionner SPENGO et l'Authentification Intégrée de Windows (IWA). IWA est un terme simple qui signifie essentiellement Kerberos ou NTLM ou SPNEGO à négocier Kerberos ou NTLM.
À l'aide d'une liaison LDAP comme un moyen de valider les informations d'identification n'est pas efficace et requiert SSL. Mais jusqu'à récemment, la mise en œuvre de Kerberos et NTLM ont été difficile à l'aide de LDAP comme une maj du service d'authentification a persisté. Mais à ce stade, il doit généralement être évitée. LDAP est un répertoire d'informations et non d'un service d'authentification. L'utiliser pour son usage prévu.
Alors, comment pensez-vous mettre en œuvre Kerberos ou NTLM en Java et dans le contexte des applications web en particulier?
Il y a un certain nombre de grandes entreprises comme Quest Software et Centrify qui ont des solutions qui mentionnent spécifiquement les Java. Je ne peux pas vraiment commenter sur ceux-ci car ils sont à l'échelle de l'entreprise "solutions de gestion des identités", et donc, de la recherche à la commercialisation tour sur leur site web, il est difficile de dire exactement ce que sont les protocoles utilisés et comment. Vous auriez besoin de les contacter pour les détails.
La mise en œuvre de Kerberos en Java n'est pas très difficile comme le standard des bibliothèques Java en charge Kerberos par le biais de l'org.l'ietf.gssapi classes. Cependant, jusqu'à récemment, il a été un obstacle majeur - c'est à dire ne pas envoyer brut des jetons Kerberos, il envoie SPNEGO jetons. Mais avec Java 6, SPNEGO a été mis en œuvre. En théorie, vous devriez être en mesure d'écrire quelques GSSAPI code qui peut s'authentifier IE clients. Mais je n'ai pas essayé. Le Soleil de la mise en œuvre de Kerberos a été une comédie d'erreurs au fil des ans sur la base de Soleil track record dans ce domaine, je ne voudrais pas faire de promesses sur leur SPENGO mise en œuvre jusqu'à ce que vous avez cet oiseau dans la main.
Pour NTLM, il est Gratuit OSS projet appelé JCIFS qui a un NTLM l'authentification HTTP Filtre de Servlet. Cependant, il utilise un man-in-the-middle méthode pour valider les informations d'identification avec un serveur SMB qui ne fonctionne pas avec l'authentification NTLMv2 (qui est en train de devenir une nécessaire stratégie de sécurité du domaine). Pour cette raison et pour d'autres, le Filtre HTTP cadre de JCIFS est prévu pour être retiré. Noter qu'il existe un certain nombre de spin-offs qui utilisent JCIFS pour mettre en œuvre la même technique. Donc, si vous voyez d'autres projets qui prétendent soutenir NTLM SSO, vérifiez les petits caractères.
La seule bonne façon de valider les informations d'identification NTLM avec Active Directory à l'aide de la NetrLogonSamLogon DCERPC appel au NETLOGON avec Canal Sécurisé. Est-ce une telle chose existe pas en Java? Oui. Ici, il est:
http://www.ioplex.com/jespa.html
Jespa est un 100% Java NTLM mise en œuvre qui prend en charge l'authentification NTLMv2, NTLMv1, l'intégrité et la confidentialité des options et de ladite NETLOGON validation d'informations d'identification. Et il comprend un HTTP SSO Filtre, un JAAS LoginModule, client HTTP, SASL le client et le serveur (avec JNDI de liaison), générique de "fournisseur de services de sécurité" pour la création de services NTLM et plus.
Mike