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).

Antworten auf die Frage(4)

Ihre Antwort auf die Frage