Ich setzte mich mit der cloudbasierten IAM Lösung OneLogin auseinander und möchte zum Einstieg deren simpelste Beispiel-Anwendung zum laufen bringen.
Die Entwicklerseite von OneLogin: OneLogin Developers: APIs, Documentation & Tutorials
OneLogin Developer Account erstellen
Auch für das einfachste Beispiel wird ein Account benötigt, hierzu kann ein kostenfreier Entwickler Account angelegt werden.
Ich habe mich dabei für den Domain Namen deringo-dev.onelogin.com entschieden.
Beispielanwendung
Am einfachsten scheint mir eine OpenID Connect basierte Javascript Anwendung zu sein, daher wähle ich aus den Samples die Single Page App heraus.
Zuerst Node.js updaten.
Projekt clonen und ausführen:
mkdir test cd test git clone https://github.com/onelogin/onelogin-oidc-node.git cd '.\onelogin-oidc-node\2. Implicit Flow\' npm install --> npm ERR! Unexpected token '.'
Das fängt ja mal wieder gut an 🙁
nvm use 14.17.3 npm install
Mit der alten Version hat es dann funktioniert. 🙂
npm start
Die Anwendung lässt sich jetzt über http://localhost:3000/ aufrufen.
Es kommt natürlich ein Fehler, da die Anwendung noch nicht konfiguriert ist:
Application in OneLogin anlegen
Auf der OneLogin Seite (https://deringo-dev.onelogin.com/) unter Applications auf Add gehen und eine OpenId Connect App anlegen.
Name, Beschreibung und (schnell gemaltes) Square Icon vergeben und speichern.
Im darauf folgenden Screen ist mein Square Icon leider nicht mehr vorhanden. Dafür steht dort aber ein Feld Tab, in dem etwas steht, was dort definitiv nicht stehen sollte (Name eines Kunden, woher kommt das denn??)
Ich ignoriere das erstmal und notiere mir die Client ID unter SSO.
Ich muss noch die Redirect URI zu meiner App (http://localhost:3000) eintragen:
Anwendung konfigurieren
Die Client ID und meine OneLogin-Subdomain (deringo-dev) trage ich in der main.js ein.
// // OIDC Client Configuration // const ONELOGIN_CLIENT_ID = 'geheim-a91c-013a-175a-02471d082b0b208817'; const ONELOGIN_SUBDOMAIN = 'deringo-dev';
Die Anwendung lässt sich über http://localhost:3000/ aufrufen:
Jetzt erscheint eine Login-Seite:
Ich kann mich mit meinen OneLogin-Developer-Zugangsdaten einloggen.
Das Ausloggen gestaltet sich bisher als unmöglich: Weder der Neustart des Servers, noch das Löschen des Local, bzw. Session Storages führt zum erneuten Login. Cookies sind keine gesetzt und können daher nicht gelöscht werden.
Über ein neues, anonymes Browserfenster lässt sich ein erneuter Login erzwingen.
Neuer User für die Beispielanwendung
Auf der OneLogin Seite (https://deringo-dev.onelogin.com/) unter Users auf New User gehen und einen neuen Benutzer anlegen.
First-, Last-, Username eingetragen.
Beispiel-App (SinglePageApp) hinzugefügt.
Ein Passwort lässt sich anscheinend nicht über die OneLogin Seite für den Benutzer setzen. Für die Passwort-Wiederherstellung wird eine Email-Adresse benötigt, das ist zumindest der einzig wählbare Authentifizierungsfaktor. Ich muss meinem neuen Benutzer auch eine Email Adresse vergeben.
Das nachträgliche setzen der Email Adresse hat nicht funktioniert. Ich habe dann einen weiteren neuen Benutzer angelegt, diesmal ohne Username, dafür aber mit Email Adresse.
Mit diesem Benutzer konnte ich dann das Passwort "Zurück"setzen lassen und mich anschließend einloggen.
Beispielanwendung 2
Nach dem Implicit flow, der nicht mehr empfohlen ist, schaue ich mir den Auth Code Flow + PKCE an, der als Best Practice gilt.
Aus dem bereits geclonten Git Repository ist das das 4. Projekt.
cd '.\4. Auth Flow - PKCE\' npm install npm start
Die Client ID und meine OneLogin-Subdomain (deringo-dev) trage ich in der main.js ein.
// // OIDC Client Configuration // const ONELOGIN_CLIENT_ID = 'geheim-a91c-013a-175a-02471d082b0b208817'; const ONELOGIN_SUBDOMAIN = 'deringo-dev';
Die Anwendung lässt sich über http://localhost:3000/ aufrufen:
Der Login mit meinem Benutzer funktionierte problemlos.
Allerdings wurden anschließend auf der Sample Seite NICHT die Benutzer Daten angezeigt.
Ein Blick in die Console des Browsers zeigt den Fehler:
Da die minified Version des oidc-client.js nicht sonderlich leserlich ist, lade ich die nicht-minified Version herunter und speichere sie neben der minified Version im Projekt ab.
In der Datei index.hbs wird das oidc-client Script importiert, also passe ich dort die Referenz an.
Aber auch das debuggen mit der nicht-minified Version brachte keinen weiteren Erkenntnisgewinn.
Die Lösung fand sich schließlich in der OneLogin Konfiguration: Im SSO Teil der Applikation musste der Token Endpoint auf "None (PKCE)" umgestellt werden.