GSSContext с нулевым SrcName

Я работаю над веб-приложением с помощью единого входа на основе имени входа в домен Windows, для этого я выбрал проверку билетов Kerberos. Но сейчас я столкнулся с проблемой, для которой не могу найти решение. Мне удается проверить заявку без исключений, но когда я пытаюсь получить имя пользователя,NullPointerException брошен, потому что имя пользователяnull и я не знаю, где проблема.

Почему имя пользователя пустое, если я не получаю никаких исключений во время проверки?

Как я получу имя пользователя:String clientName = gssContext.getSrcName().toString();

Я создаю свой клиент на основе этого:

Использование GSSManager для проверки билета Kerberos

Как получить билет службы Kerberos через GSS-API?

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

Обновление 1:

Как я настраиваю контент, просто скопируйте и вставьте форму здесь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();

Обновление 2:

Если я настрою весеннюю безопасность на основе этогоhttps://spring.io/blog/2009/09/28/spring-security-kerberos-spnego-extension я также получил ту же ошибку:

java.lang.NullPointerException в org.springframework.security.extensions.kerberos.SunJaasKerberosTicketValidator $ KerberosValidateAction.run (SunJaasKerberosTicketValidator.java:136) в org.springframework.security.extensions.kerberos.SunJaasKerberosTicketValidator $ KerberosValidateAction.run (SunJaasKerberosTicketValidator.java:125 ) в java.security.AccessController.doPrivileged (собственный метод) в 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;
    }

}

Обновление 3:

Также попытался изменить версию Java с 1.8 до 1.7, как предложено здесьСбой аутентификации домена с помощью Kerberos, Безрезультатно.

Обновление 4:

Прежде всего. Не используйте Java 1.8 b40 и b45, они оба сломаны. И не тестируйте его на локальном ПК, он не работает (я не знаю почему).

После перехода на новейшую (b65) версию Java я получил исключение по поводу надписи (не удается найти ключ соответствующего типа для расшифровки AP REP - AES256 ...). Это я исправил с помощью Java Cryptography Extension (JCE) для Java 1.8 и заново создаю keytab с помощью/crypto AES256-SHA1 после всего этого я получил исключение:

GSSException: ошибка, не указанная на уровне GSS-API (уровень механизма: контрольная сумма не удалась) в sun.security.jgss.krb5.Krb5Context.acceptSecContext (неизвестный источник) в sun.security.jgss.GSSContextImpl.acceptSecContext (неизвестный источник) в sun. .jgss.GSSContextImpl.acceptSecContext (Неизвестный источник) в GssServer $ GssServerAction.run (GssServer.java:159) ... ... еще 4 Причина: KrbException: Сбой контрольной суммы в sun.security.krb5.internal.crypto.Arptyc ( Неизвестный источник) в sun.security.krb5.internal.crypto.ArcFourHmacEType.decrypt (Неизвестный источник) в sun.security.krb5.EncryptedData.decrypt (Неизвестный источник) в sun.security.krb5.KrbApReq.authenticate (Неизвестный источник) sun.security.krb5.KrbApReq. (Неизвестный источник) at sun.security.jgss.krb5.InitSecContextToken. (Неизвестный источник) ... еще 8 Причин: java.security.GeneralSecurityException: контрольная сумма не удалась в sun.security.krb5. internal.crypto.dk.ArcFourCrypto.decrypt (Неизвестный источник) в sun.security.krb5.internal.crypto.ArcFourHmac.decrypt (Unk Неизвестный источник) ... еще 14

Я старалсяэтот урок и другой способ создания keytabfile, но у меня до сих пор нет решения.

Ответы на вопрос(2)

Ваш ответ на вопрос