Single-Sign-On (SSO) mit Tomcat in Windows Domänen

Ein gäniges Requirement in internen Web-Anwendungen ist Single-Sign-On, um den Benutzern das leidige Authentifizieren zu ersparen.

Falls dies in einer Java Web-Applikation mittels Kerberos und SPNEGO z.B. innerhalb einer Windows Domäne umgesetzt werden soll, gibt es mittlerweile hierzu ein nettes OpenSource Projekt:

http://spnego.sourceforge.net/

Mithilfe eines SPNEGO Servlet Filters wird die gesamte Kerberos Authentifizierung kompackt gekapselt und der Anwendung steht via HttpServletRequestgetRemoteUser() die ermittelte Identität zur Verfügung.

Der fortgeschrittene und besonders interessante Anwendungsfall ist natürlich die Credentials Delegation. Hierbei wird beweisbar im Namen des vor dem Rechner angemeldeten Benutzers vom WebServer auf einen anderen weiteren Server zugegriffen.

Hier ist eine nette Anleitung für einen SOAP WebService (z.B. Sharepoint) zu sehen:

http://spnego.sourceforge.net/protected_soap_service.html

Folgende Code-Beispiele zeigen, wie ein SOAP Service mit SPNEGO ohne axis2 Framework aufgerufen werden kann:

http://spnego.sourceforge.net/SpnegoHelloClient.java

http://spnego.sourceforge.net/ExampleSpnegoSOAPClient.java

Posted in Java, Tomcat | Tagged | Leave a comment

Java und DNS Abfragen

DNS Abfragen direkt aus Java zu machen ist überraschend einfach, wenn man erst einmal herausgefunden hat, wo es sich versteckt.

Unterer Test-Code sucht z.B. nach SRV Records mit dem Namen _kerberos._tcp.domain.com, um alle Kerberos Key-Distribution-Center (KDC) innerhalb einer Windows Domäne zu finden.

DirContext ictx;
 try {
 ictx = new InitialDirContext();
 } catch (NamingException e) {
 throw new RuntimeException("Error creating JNDI Context", e);
 }

 final Attribute myAttr;
 try {
 myAttr = ictx.getAttributes("dns:/_kerberos._tcp." + domain.getName(),
          new String[] {"SRV"}).get("SRV");
 } catch (NamingException e) {
 System.err.println(e);
 return krbServers;
 }

 final NamingEnumeration<?> myEnum;
 try {
 myEnum = myAttr.getAll();
 } catch (NamingException e) {
 throw new RuntimeException("Error Attribute.getAll()", e);
 }
Posted in Java | Tagged | Leave a comment

Tomcat Monitoring mit Lamda Probe

Die Gesundheit von Web-Applikationen in einem Tomcat Web Applikation Server auf einen Blick zu erfassen ist gar nicht so einfach. Ein nettes Werkzeug schafft unkompliziert Abhilfe.

Zwar lassen sich über die klassischen Techniken JMX und jconsole zahlreiche Parameter zur Laufzeit auslesen, allerdings sind dies definitiv zu viele Informationen, die erst mühsam gesichtet und sortiert werden müssen. Des weiteren bleiben die speziellen Anforderungen von Web-Applikationen wie z.B. die Analyse von Inhalten gerade laufender Web-Sessions stiefmütterlich behandelt.

Hier schafft Lamda Probe unkompliziert Abhilfe und ist eine wertvolle Ergänzung im Werkzeugkasten. Als kleine zusätzliche Webapplikation auf dem zu überwachenden Server gibt sie sehr interessante Einblicke unter anderem in:

  • In den letzten Stunden auf der Maschine vorhandene Last (Graph zur Anzahl Requests und Datendurchsatz)
  • Aktuell auf der Maschine vorhandene Sessions
  • Inhalte von Sessions können angezeigt werden (wenn ein toString() am Session-Objekt implementiert ist)

Viele weitere Optionen und die wirklich simple Installation sind in diesem Artikel erklärt.

Posted in Java, Tomcat | Leave a comment