Мое понимание получения сервисного билета было неправильным. Я не должен получать учетные данные от сервиса - это не возможно на клиенте, потому что клиент действительно не имеет TGT для сервера и поэтому не имеет прав получить сервисные учетные данные. Что просто отсутствует, здесь должен создать новый GSSContext и инициализировать его. Возвращаемое значение из этого метода содержит сервисный билет, если я понял это правильно. Вот рабочий пример кода. Это должно быть выполнено в PrivilegedAction от имени зарегистрированного предмета:
GSSManager manager = GSSManager.getInstance();
GSSName clientName = manager.createName("clientUser", GSSName.NT_USER_NAME);
GSSCredential clientCred = manager.createCredential(clientName,
8 * 3600,
createKerberosOid(),
GSSCredential.INITIATE_ONLY);
GSSName serverName = manager.createName("http@server", GSSName.NT_HOSTBASED_SERVICE);
GSSContext context = manager.createContext(serverName,
createKerberosOid(),
clientCred,
GSSContext.DEFAULT_LIFETIME);
context.requestMutualAuth(true);
context.requestConf(false);
context.requestInteg(true);
byte[] outToken = context.initSecContext(new byte[0], 0, 0);
System.out.println(new BASE64Encoder().encode(outToken));
context.dispose();
outToken содержит, затем содержит Сервисный Билет. Однако это не способ, которым GSS-API был предназначен, чтобы использоваться. Его цель состояла в том, чтобы скрыть те детали к коду, таким образом, лучше установить GSSContext использование GSS-API с обеих сторон. Иначе действительно необходимо знать то, что Вы делаете из-за потенциальных дыр в системе безопасности. Для получения дополнительной информации читайте Sun учебное руководство SSO с kerberos более тщательно, чем я.
РЕДАКТИРОВАНИЕ: Просто забыл, что я использую Windows XP с SP2. Существует новая "функция" в этой версии Windows, который запрещает использование TGT в Windows RAM. Необходимо отредактировать реестр для разрешения этого. Для получения дополнительной информации взгляните на тема страницы JGSS Troubleshooting в случае, если Вы испытываете "KrbException: KDC не имеет никакой поддержки типа шифрования (14)", как я сделал.