2013-07-29 8 views
6

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.

+0

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

Antwort

6

Erhält Waffle das Kerberos-Ticket von Windows?

Waffle verwendet den Windows SSPI, der alle Vorgänge mit Kerberos-Tickets für den Client ausführt. Der Kunde sieht das Ticket nie.

Wie validiert der Server das Ticket des Clients?

Dies ist eine grundlegende Kerberos-Frage. Das an den Server gesendete Token wird durch den geheimen Schlüssel des Servers verschlüsselt. Dies garantiert, dass das Token vom Ticket Granting Service erstellt wurde, der den Client authentifizierte.

Kann ich absolut den Benutzergruppen vertrauen, die ich nach der do-Schleife aus dem Server-Kontext erhalten?

Ja, die werden aus dem Sicherheits-Token abgerufen. Dies ist eine Windows-spezifische Erweiterung des MIT-Kerberos-Protokolls.