SpNego: обнаружен дефектный токен
У меня есть клиент Java, подключающийся к службе WCF. Эта служба настроена для запуска на хосте как отдельный пользователь домена (т.е. не как локальная служба или сетевая служба). Сервис публикует userPrincipalName в своем WSDL.
Во время обмена токенами SpNego я получаю в клиенте следующее исключение
Defective token detected (Mechanism level: AP_REP token id does not match!)
This is the call stack:
at sun.security.jgss.spnego.SpNegoContext.initSecContext(SpNegoContext.java:450)
at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:230)
at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:162)
Если я настраиваю службу WCF для запуска под локальной системной учетной записью, обмен токенами SpNego работает. Нужно ли изменять код для служб, которые не работают под локальной системной учетной записью?
Update-1
После некоторой отладки, когда клиент C# подключался к службе WCF, я обнаружил, что клиент C# использует модифицированную версию протокола SpNego под названием MS-SPNG. Java 6 поддерживает это? При проверке токена появляется ошибка о неподдерживаемом механизме 1.2.840.113554.1.2.2.3.
1 ответ
Эти ссылки объясняют, что происходит. У MS есть расширение для протокола SpNego, которое включается, когда мы запускаем службу WCF как пользователь (т.е. не как локальная служба и т. Д.). Это спецификация MS для нового протокола, а вот документ openjdk, в котором описаны обходные пути.