Получение билета службы Kerberos с использованием Waffle в Java - PullRequest
0 голосов
/ 24 апреля 2018

Я работаю над настоящим 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 в конце.

...