GSSContext con nulo SrcName

Estoy trabajando en una aplicación web con SSO basada en el inicio de sesión del dominio de Windows, para este propósito he elegido validar los tickets de Kerberos. Pero ahora me enfrento a un problema para el que no puedo encontrar una solución. Logré validar un ticket sin excepciones, pero cuando intento obtener el nombre de usuario,NullPointerException se lanza, porque el nombre de usuario esnull Y no sé dónde está el problema.

¿Por qué el nombre de usuario es nulo si no obtengo ninguna excepción durante la validación?

Cómo obtengo userName:String clientName = gssContext.getSrcName().toString();

Creo mi cliente basado en esto:

Usando GSSManager para validar un ticket Kerberos

¿Cómo obtener un ticket de servicio kerberos a través de GSS-API?

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

Actualización 1:

Cómo configuro el contenido, solo copie y pegue el formulario aquíhttps://stackoverflow.com/a/25450862/1646082:

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();

Actualización 2:

Si configuro la seguridad de primavera basada en estohttps://spring.io/blog/2009/09/28/spring-security-kerberos-spnego-extension También recibí el mismo error:

.e. ) en java.security.AccessController.doPrivileged (Método nativo) en 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;
    }

}

Actualización 3:

También intenté cambiar la versión de Java de 1.8 a 1.7 como se sugiere aquíLa autenticación de dominio con Kerberos falla. Sin resultados.

Actualización 4:

Ante todo. No utilices Java 1.8 b40 y b45, ambos están rotos. Y no lo pruebe en una PC local, no funciona (no sé por qué).

Después de cambiar a la versión más nueva (b65) de Java, obtuve una excepción sobre la inscripción (No se puede encontrar la clave del tipo apropiado para descifrar AP REP - AES256 ...). Esto lo solucioné mediante Java Cryptography Extension (JCE) para Java 1.8 y recreé la tabla de claves con/crypto AES256-SHA1 Después de todo esto tengo una excepción:

GSSException: error no especificado a nivel de GSS-API (nivel de mecanismo: error de suma de verificación) en sun.security.jgss.krb5.Krb5Context.acceptSecContext (fuente desconocida) en sun.security.jgss.GSSContextImpl.acceptSecContext (fuente desconocida) en sun.security .jgss.GSSContextImpl.acceptSecContext (Fuente desconocida) en GssServer $ GssServerAction.run (GssServer.java:159) ... 4 más Causado por: KrbException: Checksum falló en sun.security.krb5.internal.crypto.ArcFourHmacEType.decrypto.ArcFourHmacEType.decrypto.ArcFourHmacEType.decrypto.ArcFourHmacEType.decrypto.ArcFourHmacEType.decrypto.ArcFourHmacEType.decrypto.ArcFourHmacEType.decrypto.ArcFourHmacEType.decrypto.ArcFourHmacEType.dec. Fuente desconocida) en sun.security.krb5.internal.crypto.ArcFourHmacEType.decrypt (Fuente desconocida) en sun.security.krb5.EncryptedData.decrypt (Fuente desconocida) en sun.security.krb5.KrbApReq.authenticate (Fuente desconocida) en sun.security.krb5.KrbApReq. (Fuente desconocida) en sun.security.jgss.krb5.InitSecContextToken. (Fuente desconocida) ... 8 más Causado por: java.security.GeneralSecurityException: Falló la suma de comprobación en sun.security.krb5. internal.crypto.dk.ArcFourCrypto.decrypt (fuente desconocida) en sun.security.krb5.internal.crypto.ArcFourHmac.decrypt (Unk nown Source) ... 14 más

Lo intentéeste tutorial y otra forma de crear keytabfile, pero todavía no tengo solución.

Respuestas a la pregunta(2)

Su respuesta a la pregunta