Comment valider un ticket Kerberos sur un serveur Java?
nous sommes à l'aide de JAAS pour activer la connexion Unique dans une application Java à l'aide de la Windows Kerberos ticket cache. Notre jaas.conf fichier de configuration ressemble à ceci:
LoginJaas {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
doNotPrompt=true
debug=true;
};
Avec cela, nous pouvons créer un Jaas LoginContext et avec succès obtenir à l'utilisateur du ticket Kerberos. Nous envoyons ce billet pour sortir de l'application serveur à l'aide de JMI. Ce que nous ne parvenons pas à faire est de vérifier sur le serveur que le ticket Kerberos a en fait été créé par notre Active Directory.
Pour le moment, nous faisons une très précaire validation du ticket simplement de vérifier si le Serveur Principal (KerberosTicket.getServer()) nom a notre nom de domaine dans le domaine. Mais bien sûr, n'importe qui peut créer un serveur Kerberos avec le même nom de domaine et utiliser ce ticket pour démarrer l'application.
Une idée que j'ai trouvé était à l'authentification Active Directory LDAP en utilisant le ticket Kerberos. Malheureusement, nous avons de l'utilisation de Windows 7 et de ré-utiliser le ticket Kerberos pour l'authentification LDAP fonctionne uniquement lorsque le paramètre est une entrée de Registre (voir http://java.sun.com/j2se/1.5.0/docs/guide/security/jgss/tutorials/Troubleshooting.htmlrecherche pour allowtgtsessionkey). Ce qui est inacceptable pour nos utilisateurs.
Est-il possible de valider le ticket à l'encontre de notre serveur Active Directory? Je pense qu'il y est une manière de vérifier si la KerberosTicket.getServer() billet d'entrée est égale à la billetterie de notre serveur, mais je n'ai aucune idée de comment faire cela. Mise à JOUR: KerberosTicket().getServer() ne renvoie une KerberosPrincipal qui ne contient rien, mais le serveur billet nom et domaine, de sorte qu'il n'est pas adapté pour la validation.
Merci pour votre aide,
memminger hütte
source d'informationauteur user269667
Vous devez vous connecter pour publier un commentaire.
Comme vous l'avez mentionné, la bonne façon de résoudre ce problème est par kerberizing votre service, qui est le point de l'ensemble du protocole Kerberos (authentification des clients sur les serveurs). Billet réutilisation ne fonctionne pas exactement parce que ce serait un problème de sécurité si il l'a fait.
Un service Kerberos n'a pas besoin de "se connecter à Active Directory", il a juste besoin d'avoir une clé partagée avec AD.
BTW, pour obtenir SSO à l'aide de JAAS nécessite d'avoir que allowtgtsessionkey ensemble, il n'y a pas moyen de contourner cela sur Windows.
Que personne ne semble vraiment connaître la réponse à cela, je suppose que nous avons à faire un bon service Kerberos de notre serveur d'application. Celui qui se connecte à l'Active Directory et qui a l'attribut ServicePrincipalName correctement réglé. Un peu comme SPNEGO ne pour HTTP. Un bon point de départ la façon de le faire sera le SPNEGO filtre de Servlet sur SourceForge (http://spnego.sourceforge.net/). http://thejavamonkey.blogspot.com/2008/04/clientserver-hello-world-in-kerberos.html est aussi un très bon exemple de la façon de faire le Service d'ouverture de session.
Malheureusement, cela conduit à le même problème avec la clé de registre, de sorte que j'ai posté une nouvelle question sur la Est-il un moyen en Java ou en ligne de commande util pour obtenir un ticket Kerberos pour un service en utilisant le natif de SSPI API?.