Liferay 7.3 SSO mit Google

Anbindung von Liferay an einen OpenID Connect Provider

 

Was habe ich mich echauffiert... WarRuM gIbT eS dAs nIcht mEhR? WaRuM wIrd dAs nIcHt MeHr gEpFlEgT? '!#§$"&

Die Rede ist vom Google Login mit Liferay. Das beliebte Plugin von Sergio González wurde mit Liferay 7 nicht mehr weiterentwickelt, die meisten Suchergebnisse bei Google auf der ersten Seite (Wie? Es  gibt eine zweite Seite??!?) zum Thema Google Login mit Liferay, basieren auf eben diesem Plugin, sodass man den Anschein bekommen könnte, dass verpasst wurde, mit der 7er Version eine adäquate Lösung für den Login über externe Identity Provider zu bekommen.

Ich sah mich also schon irgendwelche Login Hooks schreiben; Auch in den einschlägigen Blogs und Foren findet man den ein oder anderen Ansatz der genau dieses tut - eine Funktion implementieren, die andere Systeme out-of-the-box zur Verfügung stellen.

Nach dieser augenzwinkernden Einleitung sei gesagt: Liferay hat's viel besser gemacht als irgendwelche proprietären Plugins zur Verfügung zu stellen, um sich mit anderen Diensten am Portal anzumelden. Die Rede ist von der Unterstützung von OpenID Connect.

"OpenID Connect 1.0 is a simple identity layer on top of the OAuth 2.0 protocol. It allows Clients to verify the identity of the End-User based on the authentication performed by an Authorization Server, as well as to obtain basic profile information about the End-User in an interoperable and REST-like manner.

OpenID Connect allows clients of all types, including Web-based, mobile, and JavaScript clients, to request and receive information about authenticated sessions and end-users. The specification suite is extensible, allowing participants to use optional features such as encryption of identity data, discovery of OpenID Providers, and session management, when it makes sense for them." (Quelle: https://openid.net/connect/)

​​​​​​OpenID Connect basiert also auf dem OAuth 2.0 Protokoll, ist plattformunabhängig und hat sich so weit etabliert, dass Google, GitHub und viele andere beliebte Dienste diesen Standard unterstützen. Bleibt also nur die Frage: Wie benutze ich das jetzt in Liferay? Vorab ist noch zu sagen, dass man Liferay selbst auch als OAuth 2 Provider konfigurieren kann - aber das wird Thema in einem anderen Blogbeitrag.

Google als OpenID Connect Provider konfigurieren

Zunächst einmal muss man zum Dashboard der Google Cloud APIs​​​​​​. Dort angekommen sollte man ein neues Projekt anlegen, sofern man nicht bereits eines hat zu dem man diesen Service hinzufügen will. Beliebigen Namen wählen, fertig.

Hat man das Projekt angelegt, findet man unter "Anmeldedaten" drei Bereiche: API-Schlüssel, OAuth 2.0-Client-IDs und Dienstkonten. Wir benötigen den mittleren. Also auf "+Anmeldedaten erstellen" klicken und OAuth-Client-ID auswählen

Als Anwendungstyp muss hier "Webanwendung" ausgewählt werden. Nun sollte man hier im untenstehenden Dialog landen. Wichtig sind hier nur ein beliebiger Name und die Weiterleitungs-URL.

Diese ist für Liferay   https://<deineDomain>/o/portal/login/openidconnect

Danach "Speichern" und man erhält (im Screenshot noch rechts zu sehen) eine Client-ID und ein Clientschlüssel. Mit diesen gehen wir zum zweiten Teil in Liferay über.

OpenID Connect in Liferay konfigurieren

Für die Konfiguration in Liferay genügt es eigentlich, sich die vorhandene Dokumentation anzuschauen https://help.liferay.com/hc/en-us/articles/360026501171-Authenticating-with-OpenID-Connect

Aber nur hier gibt es die Variante auf Deutsch und mit bunten Bildchen. ;-)

Zunächst einmal gibt es zwei Möglichkeiten OpenID Connect zu aktivieren. Einmal systemweit unter

Control PanelConfigurationSystem SettingsSecurity → SSO und dann unter System Scope OpenID Connect.

Darüber hinaus ist es aber auch möglich OpenID Connect pro Instanz zu aktivieren.

Control PanelConfigurationInstance SettingsSecurity → SSO und dann unter Instance Scope OpenID Connect.

Die eigentliche Konfiguration der OpenID Connect Provider findet in Liferay unter den System Settings statt.

Update Liferay 7.3.4 GA5 - Die Konfiguration geschieht nun pro Instanz ist aber auch noch unter den System Settings zu erreichen. Daumen hoch dafür!

Wie im oberen Screenshot zu sehen ist, findet sich hier der Punkt "OpenID Connect Provider". Unter diesem Punkt legt man einen neuen Eintrag an, bei dem uns zunächst ein längliches Formular entgegenschlägt, von dem man aber im Idealfall nur einen Bruchteil braucht.

Als Name kann man eine beliebige Bezeichnung wählen. ClientID und client secret werden mit den Werten befüllt, die wir vorher aus der Google Applikation geholt haben. Scopes kann unverändert bleiben. Hat man den Discovery Endpoint eines Providers, so kann man sich sämtliche, weitere Angaben in diesem Formular sparen. Für Google ist das

https://accounts.google.com/.well-known/openid-configuration​​​​​​​

Danach nur noch speichern. Klickt man nun im Login-Dialog auf OpenID Connect, erhält man eine Auswahl der konfigurierten OpenID Connect Provider.

​​​​Nach Auswahl und Bestätigung wird man ggf. zur Google Loginseite geleitet (falls man dort noch nicht eingeloggt ist) oder direkt zu Liferay zurück, wo man nun eingeloggt ist. That's it.

#KeepITFast