¿Alguien sabe cómo obtener un boleto de servicio del Key Distribution Center (KDC) usando la API GSS de Java?¿Cómo obtener un ticket de servicio kerberos a través de GSS-API?
Tengo una aplicación cliente-gruesa que primero se autentica vía JAAS utilizando el Krb5LoginModule para obtener el TGT del caché del ticket (fondo: Windows utiliza una implementación kerberos y almacena el ticket en un área segura de memoria). Desde LoginManager obtengo el objeto Subject que contiene el TGT. Ahora esperaba que cuando creara un objeto GSSCredential específico para mi servicio, el boleto de servicio también se incluiría en las credenciales privadas del Sujeto (lo he leído en algún lugar de la web). Así que he intentado lo siguiente:
// Exception handling ommitted
LoginContext lc = new LoginContext("HelloEjbClient", new DialogCallbackHandler());
lc.login()
Subject.doAs(lc.getSubject(), new PrivilegedAction() {
public Object run() {
GSSManager manager = GSSManager.getInstance();
GSSName clientName = manager.createName("clientUser", GSSName.NT_USER_NAME);
GSSCredential clientCreds = manager.createCredential(clientName, 8 * 3600, createKerberosOid(), GSSCredential.INITIATE_ONLY);
GSSName serverName = manager.createName("[email protected]", GSSName.NT_HOSTBASED_SERVICE);
manager.createCredential(serverName, GSSCredential.INDEFINITE_LIFETIME, createKerberosOid(), GSSCredential.INITIATE_ONLY);
return null;
}
private Oid createKerberosOid() {
return new Oid("1.2.840.113554.1.2.2");
}
});
Desafortunadamente me siento un GSSException: No hay credenciales válidas siempre (nivel Mecanismo: No se pudo encontrar ninguna TGT Kerberos).
@Michael: Gracias por su contribución. Como puedes ver, escribí esto hace bastante tiempo, así que no recuerdo los detalles exactos, pero estoy bastante seguro de que esto solo fue un ejemplo. ¿Qué crees que se puede hacer para mejorar esta respuesta? –
revise su enlace al tutorial de Sun SSO con kerberos y eche un vistazo a la figura 6. Aquí está el ciclo sobre el que escribí. –
Creo que no incluí el ciclo porque no pude entender qué se supone que deben hacer los métodos readToken() y sendToken (...). –