Ich möchte Single Sign On mit Kerberos in Java implementieren und habe es erfolgreich geschafft, ein Ticket für den Dienst zu erstellen, indem ich das Ticket aus der Windows-Anmeldung verwendet habe. Leider kann ich dieses Ticket nur erstellen, wenn der Registry Key "allowtgtsessionkey" aktiviert ist. Sobald ich ihn deaktiviere, erhalte ich eine Ausnahme mit der Meldung "Identifier doesn't match expected value (906)". Der Registrierungsschlüssel ist dokumentiert unter http://java.sun.com/j2se/1.5.0/docs/guide/security/jgss/tutorials/Troubleshooting.html y http://support.microsoft.com/kb/308339 .
Leider habe ich keinen Zugriff auf die Registrierung auf den Computern, auf denen meine Anwendung verwendet wird, also suche ich nach einer Möglichkeit, dies zu tun, ohne sie zu ändern. Wenn ich Single Sign On über SPNEGO im Internet Explorer oder Mozilla Firefox durchführe, wird ein Service-Ticket in meinem Ticket-Cache erstellt, also muss es auf jeden Fall eine Möglichkeit geben, dies zu tun, ohne den Registrierungsschlüssel zu setzen. Hat jemand eine Idee, wie man das in Java machen kann?
Vielen Dank für Ihre Hilfe, memminger
Update: Ich gebe dieses Problem auf. Der Windows-Registrierungsschlüssel verhindert den Zugriff auf das Ticket (genauer gesagt: den Betreff) im Ticket-Cache. Java auf Windows verwendet seine eigene GSSAPI-Implementierung, und ich nehme an, dass diese Zugriff auf das Ticket benötigt, um ein Service-Ticket zu erstellen. Die SSPI-Windows-API hat jedoch vollen Zugriff auf den Ticket-Cache und kann somit Service-Tickets erstellen. Diese API wird von den Webbrowsern verwendet, aber nicht von Java (laut http://java.sun.com/developer/technicalArticles/J2SE/security/#3 ). Wenn ich SSPI in Firefox deaktiviere, nachdem ich einmal auf eine Webseite zugegriffen habe (so dass ein Service-Ticket erstellt wurde), kann ich immer noch auf die Seite zugreifen, so dass vielleicht ein Befehlszeilen-Utility ausreichen würde, das ein Service-Ticket unter Verwendung der SPPI-API erstellt.
Für uns bedeutet dies nun, dass wir entweder auf Single Sign On verzichten können (was für uns inakzeptabel ist) oder dass wir die Authentifizierung auf der Client-Seite unserer Anwendung durchführen (da wir nur den Benutzernamen auslesen, aber das Ticket nicht auf dem Server verifizieren können), was ein großes Sicherheitsrisiko darstellt. Ein weiteres Beispiel dafür, wie stärkere Sicherheitseinschränkungen zu größeren Sicherheitslücken führen, weil sie zu kompliziert in der Anwendung werden.