Sto cercando di utilizzare S4U2Proxy introdotto in Java 8. Purtroppo non sono riuscito a trovare questi molti esempi. Il mio requisito è che il client invii il suo certificato. Dovrei quindi delegare (usando kerberos) la sua richiesta, connettermi a KDC, ottenere il TGT, ottenere il ticket di servizio per contattare un altro server per conto dell'utente e infine contattare il servizio effettivo fornendo il ticket di servizio. Se java 8 non fornisce un approccio pulito, puoi indicarmi altre utilità che potrebbero risolvere il mio requisito.Utilizzo di Java 8 S4U2Proxy - Un buon esempio necessario
Subject.doAs(subject, new PrivilegedAction<Object>() {
@Override
public Object run() {
GSSManager manager = GSSManager.getInstance();
GSSCredential self = null;
try {
GSSName selfUser = manager.createName("serviceWhoWantstoImpersonate", GSSName.NT_USER_NAME);
Oid krb5Oid = new Oid("1.2.840.113554.1.2.2");
self = manager.createCredential(selfUser.canonicalize(krb5Oid), GSSCredential.DEFAULT_LIFETIME, krb5Oid, GSSCredential.INITIATE_ONLY);
GSSName user = manager.createName(clientName, GSSName.NT_USER_NAME);
GSSCredential impCred = ((ExtendedGSSCredential) self).impersonate(user);
} catch (GSSException e) {
e.printStackTrace();
}
return null;
}
});
Ovviamente ci saranno domande su come l'SPN è stato impostato nel KDC? Se l'account di servizio è autorizzato per la delega? L'SPN corretto è stato assegnato a quell'account di servizio? Quando l'utente "scimmia" nega ogni sorta di delega? ecc. ecc. In questo momento sento di aver fatto le impostazioni giuste in KDC. Il mio problema è quanto sopra si verifica anche prima che colpisca il KDC. Qualsiasi input valido aiuterà.
MODIFICA: Dopo alcune ricerche, sono stato in grado di eseguire S4u2self e s4u2proxy utilizzando java 8. Stupito che almeno un esempio avrebbe dovuto essere fornito dalla documentazione Oracle. Ad ogni modo, ora sto passando al prossimo stadio. Ora un altro scenario che devo gestire è la delega dei certificati Kerber tra domini. Dalla documentazione di java 8 che ho visto finora, deduce che attualmente il cross-realm non è supportato. È ancora vero?
Chiunque ha alcun tipo di soluzione? – Nischit
È possibile ottenere una risposta con uno snippet di codice? –