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

У меня есть следующий код:

public static void main(String args[]){
    try {
        //String ticket = "Negotiate YIGCBg...==";
        //byte[] kerberosTicket = ticket.getBytes();
        byte[] kerberosTicket = Base64.decode("YIGCBg...==");
        GSSContext context = GSSManager.getInstance().createContext((GSSCredential) null);
        context.acceptSecContext(kerberosTicket, 0, kerberosTicket.length);
        String user = context.getSrcName().toString();
        context.dispose();
    } catch (GSSException e) {
        e.printStackTrace();
    } catch (Base64DecodingException e) {
        e.printStackTrace();
    }
}

Конечно, это не удается. Вот исключение:

GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)

Я не знаю, что я должен сделать, чтобы решить это. Честно говоря, я не очень понимаю Kerberos.

Я получил этот билет, отправив 401 с соответствующим заголовкомWWW-Authenticate с 'Переговоры' в качестве значения. Браузер немедленно отправил тот же запрос сauthorization заголовок, содержащий этот тикет.

Я надеялся, что смогу проверить билет и определить, кто пользователь.

Нужен ли мне файл keytab? Если да, то с какими учетными данными я бы это запустил? Я пытаюсь использовать билет Kerberos для авторизации на веб-сайте. Могут ли учетные данные быть учетными данными IIS?

Что мне не хватает?

Обновление 1 Из ответа Michael-O я немного погуглил и нашелЭта статьячто привело меня кЭта статья.

Наtable 3, Я нашел1.3.6.1.5.5.2 SPNEGO.

Теперь я добавил это к своим учетным данным, следуя примеру из первой статьи. Вот мой код:

public static void main(String args[]){
    try {            
        Oid mechOid = new Oid("1.3.6.1.5.5.2");

        GSSManager manager = GSSManager.getInstance();

        GSSCredential myCred = manager.createCredential(null,
                GSSCredential.DEFAULT_LIFETIME,
                mechOid,
                GSSCredential.ACCEPT_ONLY);

        GSSContext context = manager.createContext(myCred);

        byte[] ticket = Base64.decode("YIGCBg...==");
        context.acceptSecContext(ticket, 0, ticket.length);
        String user = context.getSrcName().toString();
        context.dispose();
    } catch (GSSException e) {
        e.printStackTrace();
    } catch (Base64DecodingException e) {
        e.printStackTrace();
    }
}

Но теперь код не работаетcreateCredential с этой ошибкой:

GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos credentails)

Вот весь билет:YIGCBgYrBgEFBQKgeDB2oDAwLgYKKwYBBAGCNwICCgYJKoZIgvcSAQICBgkqhkiG9xIBAgIGCisGAQQBgjcCAh6iQgRATlRMTVNTUAABAAAAl7II4g4ADgAyAAAACgAKACgAAAAGAbEdAAAAD0xBUFRPUC0yNDVMSUZFQUNDT1VOVExMQw==

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

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