Я работаю над настоящим SSO в Java-приложении, работающем в Windows 10. В моем приложении уже есть аутентификация Kerberos с использованием GSSAPI Java (но, очевидно, это не работает ни в одной современной Windows, особенно со строгими политиками безопасности и пользователями домена), поэтому я хотел бы заменить текущую систему авторизации на Waffle с минимальными последствиями для общего дизайна приложения, что, я думаю, должно быть возможным, если я смогу каким-то образом получить экземпляр KerberosTicket. Я изо всех сил пытаюсь написать эту функцию, пока мне удалось запросить некоторый токен, но я действительно не знаю, что это за токен, он не соответствует формату билета Kerberos. Вот мой (на самом деле больше похоже на найденный онлайн-код):
public byte[] getServiceTicketSSPI() {
final String securityPackage = "Kerberos";
final String targetName = "<disclosed>";
IWindowsCredentialsHandle clientCredentials = null;
WindowsSecurityContextImpl clientContext = null;
final String currentUser = WindowsAccountImpl.getCurrentUsername();
try {
clientCredentials = WindowsCredentialsHandleImpl.getCurrent(securityPackage);
clientCredentials.initialize();
// initial client security context
clientContext = new WindowsSecurityContextImpl();
clientContext.setPrincipalName(currentUser);
clientContext.setCredentialsHandle(clientCredentials);
clientContext.setSecurityPackage(securityPackage);
final Sspi.SecBufferDesc continueToken = null;
do {
if(debug)
System.out.println("Using target name: " + targetName);
clientContext.initialize(clientContext.getHandle(), continueToken, targetName);
} while(clientContext.isContinue());
return clientContext.getToken();
} finally {
if (clientContext != null)
clientContext.dispose();
if (clientCredentials != null)
clientCredentials.dispose();
}
}
Честно говоря, я даже не уверен, позволяет ли SSPI увидеть настоящий билет. Я даже иду в правильном направлении с этим фрагментом? Я буду очень счастлив, поэтому увижу любые подсказки относительно того, что мне делать. Было бы идеально иметь экземпляр KerberosTicket в конце.