Ich versuche S4U2Proxy zu verwenden, das in Java 8 eingeführt wurde. Leider konnte ich diese vielen Beispiele nicht finden. Meine Anforderung ist, dass der Kunde sein Zertifikat senden würde. Ich sollte dann seine Anfrage delegieren (Kerberos verwenden), eine Verbindung zum KDC herstellen, das TGT abrufen, das Dienstticket zur Kontaktaufnahme mit einem anderen Server im Namen des Benutzers abrufen und dann den eigentlichen Dienst durch Bereitstellung des Diensttickets kontaktieren. Wenn Java 8 keinen sauberen Ansatz bietet, können Sie mich bitte auf andere Dienstprogramme verweisen, die meine Anforderungen lösen könnten.
%Vor%Offensichtlich wird es Fragen darüber geben, wie der SPN im KDC eingerichtet wurde? Ob dieses Dienstkonto für die Delegierung berechtigt ist? Wurde diesem Dienstkonto der richtige SPN zugewiesen? Wenn der Benutzer "Affe" jede Art von Delegation verweigert? etc etc. Im Moment habe ich das Gefühl, die richtigen Einstellungen im KDC vorgenommen zu haben. Mein Problem ist, dass das obige passiert, bevor es das KDC trifft. Alle gültigen Eingaben helfen.
BEARBEITEN: Nach einigen Recherchen konnte ich S4u2self und s4u2proxy mit Java 8 ausführen. Es war überraschend, dass zumindest ein Beispiel aus der Oracle-Dokumentation stammen sollte. Wie auch immer, ich gehe jetzt zur nächsten Stufe. Jetzt ein anderes Szenario, das ich behandeln muss, ist Domäne-Kerberos-Zertifikatsdelegierung. Aus der Java-8-Dokumentation, die ich bisher gesehen habe, wird gefolgert, dass derzeit kein Realm unterstützt wird. Ist es immer noch wahr?
Ich habe eine vollständige Standalone-Demo-Anwendung für Kerberos SFU-Erweiterungen in Java 8 erstellt: Ссылка
Hier ist das kurze Code-Snippet, mit dem ein SPNEGO-Token mit TGS-Ticket für einen imitierten Benutzer generiert werden kann:
%Vor% Vorsicht extendedContext
ist noch nicht eingerichtet. Möglicherweise sind mehrere Runden mit dem Server erforderlich.
Java 8 Kerberos-Code unterstützt noch keinen bereichsübergreifenden Identitätswechsel: siehe JDK-8005819
Das Java-Dienstkonto kann in einem Bereich gehostet werden und dieser Code kann auf einen Dienst in einem anderen Bereich abzielen, sofern dieser Bereich explizit an den SPN angehängt wird, z. B. HTTP/[email protected]
Auf dieselbe Weise sollten Benutzer, die in einem anderen Bereich bekannt sind, an den Anmeldenamen in der Methode createName("[email protected]", GSSName.NT_USER_NAME)