Wir verwenden JAAS, um Single Sign On in einer Java-Anwendung mit dem Windows-Kerberos-Ticket-Cache zu aktivieren. Unsere Jaas.conf Konfigurationsdatei sieht wie folgt aus:Wie validiere ich ein Kerberos-Ticket gegen einen Server in Java?
LoginJaas {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
doNotPrompt=true
debug=true;
};
Damit wir eine JAAS Logincontext erstellen und erfolgreich die Benutzer Kerberos-Ticket bekommen. Wir senden dieses Ticket an die Serveranwendung mit JMI. Was wir jedoch nicht schaffen, ist, auf dem Server zu überprüfen, dass das Kerberos-Ticket tatsächlich von unserem Active Directory erstellt wurde.
Momentan führen wir eine sehr unsichere Überprüfung des Tickets durch, indem wir einfach überprüfen, ob der Name des Server Principals (KerberosTicket.getServer()) unseren Domain-Namen im Realm-Teil hat. Aber natürlich könnte jeder einen eigenen Kerberos-Server mit demselben Realm-Namen einrichten und dieses Ticket zum Starten der Anwendung verwenden.
Eine Idee, die ich gefunden habe, war gegen das Active Directory LDAP mit dem Kerberos-Ticket zu authentifizieren. Leider verwenden wir Windows 7 und die erneute Verwendung des Kerberos-Tickets zur Authentifizierung gegen LDAP funktioniert nur, wenn Sie einen Registrierungseintrag festlegen (siehe http://java.sun.com/j2se/1.5.0/docs/guide/security/jgss/tutorials/Troubleshooting.html, suchen Sie nach allowtgtsessionkey). Dies ist für unsere Nutzer inakzeptabel.
Gibt es eine Möglichkeit, das Ticket gegen unseren Active Directory-Server zu validieren? Ich vermute, es gibt eine Möglichkeit zu überprüfen, ob das KerberosTicket.getServer() Ticket dem Ticket unseres Servers entspricht, aber ich habe keine Ahnung, wie das geht. UPDATE: KerberosTicket(). GetServer() gibt nur ein KerberosPrincipal zurück, das nur den Namen und Realm des Servertickets enthält, daher ist es nicht für die Validierung geeignet.
Danke für Ihre Hilfe, Memminger
Haben Sie das jemals herausgefunden? –