Что делает этот пример Waffle SSO

Я пытаюсь реализовать SSO в Windows (в Java). Недавно я обнаружил делаешь именно то, что я хочу сделать с вафельницы:

// client credentials handle
IWindowsCredentialsHandle credentials= WindowsCredentialsHandleImpl.getCurrent("Negotiate");
credentials.initialize();

// initial client security context
WindowsSecurityContextImpl clientContext = new WindowsSecurityContextImpl();
clientContext.setPrincipalName(Advapi32Util.getUserName());
clientContext.setCredentialsHandle(credentials.getHandle());
clientContext.setSecurityPackage(securityPackage);
clientContext.initialize();

// accept on the server
WindowsAuthProviderImpl provider = new WindowsAuthProviderImpl();
IWindowsSecurityContext serverContext = null;

do {  

    if (serverContext != null) {

        // initialize on the client
        SecBufferDesc continueToken = new SecBufferDesc(Sspi.SECBUFFER_TOKEN, serverContext.getToken());
        clientContext.initialize(clientContext.getHandle(), continueToken);
    }  

    // accept the token on the server
    serverContext = provider.acceptSecurityToken(clientContext.getToken(), "Negotiate");

} while (clientContext.getContinue() || serverContext.getContinue());

System.out.println(serverContext.getIdentity().getFqn());
for (IWindowsAccount group : serverContext.getIdentity().getGroups()) {
    System.out.println(" " + group.getFqn());
}            

...

пример прост, он работает, и он швы, чтобы сделать именно то, что я хочу. Но я не понимаю, как это работает.

  • что происходит на заднем плане?
  • получает ли Waffle билет Kerberos из Windows?
  • как сервер проверяет билет клиента?
  • могу ли я полностью доверять группам пользователей, которые я получаю после do-loop из контекста сервера?

спасибо. Томас.

1 ответов


получает ли Waffle билет Kerberos из Windows?

Waffle использует Windows SSPI, который выполняет все операции с билетами Kerberos от имени клиента. Клиент никогда не видит билет.

как сервер проверяет билет клиента?

это основной вопрос Kerberos. Маркер, отправленный на сервер, шифруется секретным ключом сервера, что гарантирует, что маркер был создан служба предоставления билетов, которая аутентифицировала клиента.

могу ли я полностью доверять группам пользователей, которые я получаю после do-loop из контекста сервера?

да, извлекаются из маркера безопасности. Это специфичное для Windows расширение протокола MIT Kerberos.