Comment obtenir un ticket de service kerberos via GSS-API?

Quelqu'un sait-il comment obtenir un ticket de service à partir du Centre de Distribution de Clés (KDC) à l'aide de Java GSS-API?

J'ai un client lourd-application de la première authentifie via JAAS à l'aide de la Krb5LoginModule pour aller chercher le TGT à partir du cache de ticket (contexte: Windows par exemple, utilise une implémentation kerberos et stocke le tgt sécuritaire dans une zone de mémoire). À partir de la LoginManager je reçois le Sujet de l'objet qui contient le TGT. Maintenant, j'espère quand je créer un GSSCredential objet de mon service, le service de billetterie sera mis dans le Sujet les données d'identification ainsi (j'ai lu quelque part sur le web). J'ai donc essayé le suivant:

//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");
    }

});

Malheureusement je reçois un GSSException: Non valide les informations d'identification fournies (Mécanisme de niveau: impossible de trouver tout Kerberos tgt (ticket granting ticket).

OriginalL'auteur Roland Schneider | 2008-12-16