GSSContext mit null SrcName

Ich arbeite mit SSO an einer Webanwendung, die auf der Windows-Domänenanmeldung basiert. Zu diesem Zweck habe ich mich für die Validierung von Kerberos-Tickets entschieden. Aber jetzt stehe ich vor einem Problem, für das ich keine Lösung finden kann. Ich schaffe es, ein Ticket ohne Ausnahmen zu validieren, aber wenn ich versuche, den Benutzernamen zu erhalten,NullPointerException wird geworfen, weil der Benutzername @ inull und ich weiß nicht, wo ist das Problem.

Warum ist der Benutzername null, wenn ich während der Validierung keine Ausnahme erhalte?

Wie bekomme ich Benutzername:String clientName = gssContext.getSrcName().toString();

Ich erstelle meinen Client basierend auf diesem:

Verwenden von GSSManager zum Überprüfen eines Kerberos-Tickets

Wie erhalte ich ein Kerberos-Serviceticket über die GSS-API?

http: //docs.oracle.com/javase/7/docs/technotes/guides/security/jgss/single-signon.htm

Update 1:

Wie ich Inhalte einrichte, kopiere und füge sie hier einhttps: //stackoverflow.com/a/25450862/164608:

final Oid spnegoOid = new Oid("1.3.6.1.5.5.2");

GSSManager gssmgr = GSSManager.getInstance();

// tell the GSSManager the Kerberos name of the service
GSSName serviceName = gssmgr.createName(this.servicePrincipal, GSSName.NT_USER_NAME);

// get the service's credentials. note that this run() method was called by Subject.doAs(),
// so the service's credentials (Service Principal Name and password) are already
// available in the Subject
GSSCredential serviceCredentials = gssmgr.createCredential(serviceName,
        GSSCredential.INDEFINITE_LIFETIME, spnegoOid, GSSCredential.ACCEPT_ONLY);

// create a security context for decrypting the service ticket
GSSContext gssContext = gssmgr.createContext(serviceCredentials);

// decrypt the service ticket
System.out.println("Entering accpetSecContext...");
System.out.println( new String (Base64.encodeBase64( gssContext.acceptSecContext(this.kerberosTicket, 0,
        this.kerberosTicket.length) ) ));

// get the client name from the decrypted service ticket
// note that Active Directory created the service ticket, so we can trust it
String clientName = gssContext.getSrcName().toString();

Update 2:

Wenn ich die Federsicherheit basierend auf diesem @ einrichhttps: //spring.io/blog/2009/09/28/spring-security-kerberos-spnego-extensio Ich habe auch den gleichen Fehler:

java.lang.NullPointerException at org.springframework.security.extensions.kerberos.SunJaasKerberosTicketValidator $ KerberosValidateAction.run (SunJaasKerberosTicketValidator.java:136) at org.springframework.security.extensions.kerberosNun 125) unter java.security.AccessController.doPrivileged (native Methode) unter javax.security.auth.Subject.doAs (Subject.java:422)

private static class KerberosValidateAction implements PrivilegedExceptionAction<String> {
    byte[] kerberosTicket;

    public KerberosValidateAction(byte[] kerberosTicket) {
        this.kerberosTicket = kerberosTicket;
    }

    @Override
    public String run() throws Exception {
        GSSContext context = GSSManager.getInstance().createContext((GSSCredential) null);
        context.acceptSecContext(kerberosTicket, 0, kerberosTicket.length);
        String user = context.getSrcName().toString(); // ERROR!
        context.dispose();
        return user;
    }

}

Update 3:

Auch versucht, die Java-Version von 1.8 auf 1.7 zu ändern, wie hier vorgeschlagen.Domänenauthentifizierung mit Kerberos schlägt fehl. Kein Ergebnis

Update 4:

Vor allem. Verwenden Sie Java 1.8 b40 und b45 nicht, da beide fehlerhaft sind. Und teste es nicht auf einem lokalen PC, es funktioniert nicht (ich weiß nicht warum).

Nach dem Wechsel auf die neueste (b65) Java-Version ist eine Ausnahme bezüglich der Registrierung aufgetreten (Schlüssel des entsprechenden Typs zum Entschlüsseln von AP REP-AES256 nicht gefunden ...). Dies habe ich mit Java Cryptography Extension (JCE) für Java 1.8 behoben und das Keytab mit @ neu erstell/crypto AES256-SHA1 nach all dem habe ich Ausnahme:

GSSException: Fehler auf GSS-API-Ebene (Mechanismusebene: Prüfsumme fehlgeschlagen) bei sun.security.jgss.krb5.Krb5Context.acceptSecContext (unbekannte Quelle) bei sun.security.jgss.GSSContextImpl.acceptSecContext (unbekannte Quelle) bei sun. security.jgss.GSSContextImpl.acceptSecContext (Unbekannte Quelle) bei GssServer $ GssServerAction.run (GssServer.java:159) ... 4 mehr (Unbekannte Quelle) bei sun.security.krb5.internal.crypto.ArcFourHmacEType.decrypt (Unbekannte Quelle) bei sun.security.krb5.EncryptedData.decrypt (Unbekannte Quelle) bei sun.security.krb5.KrbApReq.authenticate (Unbekannte Quelle) at sun.security.krb5.KrbApReq. (Unbekannte Quelle) at sun.security.jgss.krb5.InitSecContextToken. (Unbekannte Quelle) ... 8 more Auslöser: java.security.GeneralSecurityException: Prüfsumme bei sun.security.krb5 fehlgeschlagen .internal.crypto.dk.ArcFourCrypto.decrypt (Unbekannte Quelle) unter sun.security.krb5.internal.crypto.ArcFourHmac.decrypt (Un bekannte Quelle) ... 14 mehr

Ich habe es versuchtdieses Tutorial und andere Möglichkeit, Keytabfile zu erstellen, aber ich habe noch keine Lösung.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage