Wie erhalte ich ein Kerberos-Serviceticket über die GSS-API?
Weiß jemand, wie er mit der Java GSS-API ein Serviceticket vom Key Distribution Center (KDC) erhält?
Ich habe eine Thick-Client-Anwendung, die sich zuerst über JAAS mit dem Krb5LoginModule authentifiziert, um das TGT aus dem Ticket-Cache abzurufen (Hintergrund: Windows verwendet beispielsweise eine Kerberos-Implementierung und speichert das Ticket für die Ticketgewährung in einem sicheren Speicherbereich). Vom LoginManager erhalte ich das Subject-Objekt, das das TGT enthält. Wenn ich nun ein bestimmtes GSSCredential-Objekt für meinen Dienst erstelle, wird das Dienstticket auch in die privaten Anmeldeinformationen des Betreffs aufgenommen (ich habe es irgendwo im Internet gelesen). Also habe ich folgendes probiert:
// 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("myService@localhost", 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");
}
});
Leider erhalte ich eine GSSException: Keine gültigen Anmeldeinformationen angegeben (Mechanismusstufe: Kerberos-Tgt konnte nicht gefunden werden).