Single Sign On (SSO)
Single Sign On (SSO / dt. Einmalanmeldung) ist ein Verfahren, welches eine Anmeldung auf Fremddiensten anhand einer Anmeldung eines primären Dienstes ermöglicht. Der primäre Dienst - IdP (Identity Prodiver) genannt - authentifiziert den Nutzer anhand der Anmeldung und übermittelt die Authentifizierung an den Fremddienst - Service Provider (SP) genannt - , sodass eine Authentifizierung beim Fremddienst nicht nötig ist. Die Standards, die zur Kommunikation zwischen SP und IdP genutzt werden sind bspw. SAML und Shibboleth.
Brandbox nutzt für Authentifizierung und Autorisierung den SAML2.0 Standard. Dieser Standard wird durch die PHP Bibliothek simplesamlphp (https://simplesamlphp.org/) an brandbox angebunden. join-sso enthält die nötige Logik, um SSO für die Administrative Oberfläche zu integrieren. Für die Integration im Shop ist shop-sso notwendig.
Konfiguration
Basiskonfiguration der Provider
Die Konfiguration von SSO wid hauptsächlich durch die Konfiguration der *Basiskonfiguration für Provider*-Datensätze (ConfigJoinSsoProvider) durchgeführt. Diese Datensätze enthalten folgende Eigenschaften.
Bezeichnung | Beschreibung |
---|---|
Anzeigename | Der Anzeigename wird über ein einfaches Textfeld definiert. Er dient nur zur einfacheren Zuordnung des Datensatzes und wird den Schaltflächen in der Anwendung vergeben. |
Service Provider ID | Eine ID, die genutzt wird, um den Service Provider (eindeutig) zu identifizieren. Wird automatisch vom System generiert. |
Nutzerentität | Die gewünschte Zielentität, auf die ein authentifizierter Nutzer gemappt werden soll. Hierbei handelt es sich um eine Auswahl der verschiedenen Nutzertypen in brandbox. |
Callback | Der Callback wird über ein Auswahlfeld definiert. Der Callback definiert, welcher SP sich um die Authentifizierung/Autorisierung kümmert. Hierbei handelt es sich um Fremdschlüssel auf die Tabelle *Callbacks* (ssoProviderCallback). |
Konfiguration | Eine Konfiguration im JSON Format. Diese Konfiguration kann genutzt werden, um die Callbacks und das Mapping der Nutzerdaten zu konfigurieren. Die Konfiguration der Callbacks hängt stets von den Callbacks selbst ab, es wird aber stets der Key config genutzt. Für die Konfiguration des Mappings sollte hier weitergelesen werden: Mapping von Nutzerdaten (SSO) |
Metadata XML | Eine XML Datei, die vom IdP bereitgestellt wird. Diese XML Datei muss über das Dateifeld hochgeladen werden. Auf Basis dieser XML-Datei werden die nötigen Daten zur Kommunikation mit dem IdP erstellt (Schlüssel, Zertifikate etc.). |
Im Shop sichtbar | Steuert, ob im Shop Schaltflächen für den Login über SSO dargestellt werden sollen. |
Im Backend sichtbar | Steuert, ob im administrativen Bereich Schaltflächen für den Login über SSO dargestellt werden sollen. |
Beim Speichern dieser Datensätze wird über die Save-Events von brandbox ggf. Zusatzlogik ausgeführt. Handelt es sich bspw. um den SAML2-Callback, werden die für SAML2 bennötigen Dateien generiert (Zertifikate, Schlüssel, Konfigurationsdateien etc.) Zertifikate und Schlüssel sind für zwei Jahre gültig. Sie müssen also rechtzeitig durch das Speichern des Datensatzes neu generiert werden.
Provider Callbacks
join-sso erstellt während der Systeminstallation einen sog. Provider Callback-Datensatz (ssoProvideCallback). Dieser Callback-Datensatz wird von Join/SsoSaml2 erstellt und wird für die Konfiguration von SSO mit SAML2.0 benötigt. Der Datensatz für SAML2 muss SAML2 als Anzeigenamen tragen und die Engine Brandbox\JoinSso\Join\SsoSaml2\Engine definieren.
Für Entwickler
Join/SsoSaml2 nutzt die PHP Bibliothek simplesamlphp/simplesamlphp. Sie wird über component/simplesamlphp installiert. component/simplesamlphp bringt außer dem requirement auf simplesamlphp/simplesamlphp noch Logik mit, welche das Konfigurationsdaten-Handling betrifft. Über Update-/Installationsroutine von composer werden Events ausgelöst, auf die component/simplesamlphp reagiert. Die Eventlistener erstellen in diesem Zug Symlinks von temp/cache/ in das remote-Verzeichnis von simplesamlphp/simplesamlphp. Dies ist nötig, um die von brandbox generierten Konfigurationsdateien nutzen zu können.