Eine Softwarelandschaft mit mehreren Anwendungen steht häufig vor dem Problem das eine mehrfache Anmeldung an den einzelnen Anwendungen unnötigerweise durchgeführt werden muss obwohl die Authentifizierungs-Mechanismen identisch sind. Seit Wildfly 8.1 gibt es die Möglichkeit auf einfachem Wege ein Single Sign On zu aktivieren. Was aber wenn die Anwendungen auf unterschiedlichen Servern betrieben werden oder der Funktionsumfang der Benutzerverwaltung des Application Servers nicht ausreicht? Keycloak!
Einfaches SSO dank Wildfly 8.1
Seit Wildfly 8.1 ist die Aktivierung des SSO für Anwendungen die auf demselben Application Server sehr einfach. Hier reicht es aus die Server-Konfiguration um die entsprechende Option zu erweitern:
<subsystem xmlns="urn:jboss:domain:undertow:3.0> ... <server name="default-server> ... <host name="default-host" alias="localhost> ... <single-sign-on path="/"/> </host> </server>
Darf es mehr sein? Keycloak!
Keycloak ist eine Single Sign On Lösung für Webanwendungen, REST-Services und Logins über Drittanbieter (Social Login, wie Facebook, Google etc.). Das Framework bietet zudem ein Identitäts Management (IdM) und ersetzt damit die JAAS Implementierung der Application Server. Benutzer, Rollen und Gruppen werden dann nicht mehr im Application Server gepflegt sondern über eine separate UI die von Keycloak bereitgestellt wird. Das eigentliche Protokoll zur Authentifizierung ist pro Anwendung Konfigurierbar und bietet die Möglichkeit von openid-connect (OAuth basiert) oder SAML.
Konfiguration
Der Betrieb des Keycloak Servers kann entweder als Deployment auf einem bestehenden Application Server erfolgen oder mittels Standalone Version die einen eigenen vorkonfigurierten Wildfly Application Server mitbringt.
Unter Verwendung der Admin UI die der Keycloak Server bereit stellt können die entsprechenden Konfigurationen vorgenommen werden. Neben der Definition der Benutzer und Rollen werden im Bereich „Clients“ die einzelnen Anwendungen definiert die über diesen Server verwaltet werden sollen. Die Anlage eines solchen Clients erfolgt im einfachsten Fall unter der Eingabe einer ID (intern), Client Protocol (SAML, openid-connect) und einer gültigen Weiterleitungs-URL die nach dem Login aufgerufen werden darf
Innerhalb unseren Anwendungen wird nun ein Keycloak-Spezifischer Authentifizierungs Mechanismus aktiviert (innerhalb der web.xml, anstatt z.B. BASIC oder FORM). Um dies zu erlauben benötigt der Server die entsprechende Implementierung:
Download: http://keycloak.jboss.org/downloads.html?dir=0%3Dadapters%3B
Dieses Archiv enthält das entsprechende „module“ das in das Root Verzeichnis des Application Servers entpackt werden muss.
Anschließen muss dieses Modul noch aktiviert werden:
standalone.xml
<server xmlns="urn:jboss:domain:4.0> <extensions> ... <extension module="org.keycloak.keycloak-adapter-subsystem"/> </extensions> ... <profile> <subsystem xmlns="urn:jboss:domain:keycloak:1.1"/> ...
In der web.xml deklarieren wir als Authentifizierung Mechanismus nun „KEYCLOAK“
web.xml
<login-config> <auth-method>KEYCLOAK</auth-method> <realm-name>Master</realm-name> </login-config>
Zusätzlich dazu benötigt die Anwendung noch die entsprechenden Informationen zum KeyCloak Server. Diese können entweder zentral in die standalone.xml eingetragen werden oder in einer separaten „keycloak.json“ Datei innerhalb der Anwendung (/WEB-INF). Die konkreten Einträge lassen sich für beide Versionen aus der Admin UI von KeyCloak generieren (im angelegten „Client“ unter „Installation“).
Das genügt bereits um die Benutzer, Rechte, Rollen und Zusatzinformationen zentral zu Pflegen und allen Anwendungen zur Authentifizierung zur Verfügung zu stellen. Neben des SSO Authentifizierungs-Mechanismus bietet KeyCloak damit auch bereits die entsprechenden Login-, und Registrierungs-Prozesse und Admin-Funktionalitäten wie Session Monitoring etc. Weitere Details zu den Möglichkeiten bietet die Doku: http://keycloak.jboss.org/docs