Ich versuche ein SSO unter Windows (in Java) zu implementieren. Vor kurzem entdeckte ich this example genau das tun, was ich mit Waffle zu tun:Was macht dieses Waffle-SSO-Beispiel?
// 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());
}
...
Das Beispiel einfach ist, es funktioniert und es Nähte genau das zu tun, was ich will. Aber ich verstehe nicht, wie es funktioniert.
- Was passiert im Hintergrund?
- Ist Waffle das Kerberos-Ticket aus dem Windows bekommen?
- Wie validiert der Server das Ticket des Clients?
- Kann ich den Benutzergruppen absolut vertrauen, die ich nach der Do-Schleife aus dem Serverkontext bekomme?
Danke. Thomas.
Wenn ich diesen Code setzen, füge ich in das Gefäß Referenz, ich bin in der Lage mein Glas zu kompilieren, aber zur Laufzeit, tomcat wirft Advautil32 kann nicht aufgelöst werden, wo brauche ich, um die Waffel Gläser zu setzen? Vielen Dank – ilansch