no way to compare when less than two revisions
Differences
This shows you the differences between two versions of the page.
— | de:2.0:single_sign_on [2025/05/30 19:23] (current) – created kainhofer | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | FIXME **Diese Seite wurde noch nicht vollständig übersetzt. Bitte helfen Sie bei der Übersetzung.**\\ //(diesen Absatz entfernen, wenn die Übersetzung abgeschlossen wurde)// | ||
+ | |||
+ | ====== Single-Sign-On mit Admidio-Benutzerkonten: | ||
+ | |||
+ | |||
+ | Ab Version 5.0 kann Admidio von anderen Anwendungen genutzt werden, um Benutzer per Single-Sign-On (SSO) anhand der Admidio-Benutzerdatenbank zu authentifizieren. Wenn ein Login in der Anwendung initiiert wird, wird der Benutzer zum Login zu Admidio weitergeleitet und nach erfolgreicher Authentifizierung zurück zur Client-Anwendung geleitet und dort angemeldet. Der Benutzer muss sich nur bei Admidio anmelden und erhält automatisch Zugang zu anderen (konfigurierten) Anwendungen. Die anderen Anwendungen müssen keine Passwörter speichern oder verarbeiten. | ||
+ | |||
+ | Die beiden dominierenden Protokolle sind das XML-basierte SAML 2.0(([https:// | ||
+ | |||
+ | ^ Client ^ SAML 2.0 ^ OpenID Connect ^ Anmerkungen | | ||
+ | ^ {{: | ||
+ | ^ {{: | ||
+ | ^ {{: | ||
+ | ^ {{: | ||
+ | ^ {{: | ||
+ | ^ {{: | ||
+ | ^ {{: | ||
+ | ^ {{: | ||
+ | ^ {{: | ||
+ | ^ {{: | ||
+ | ^ {{: | ||
+ | ^ {{: | ||
+ | ^ {{: | ||
+ | |||
+ | Andere Systeme wie Prestashop bieten keine frei verfügbaren SAML- oder OpenID-Plugins an, nur einige sehr teure kommerzielle Erweiterungen. | ||
+ | |||
+ | Alle Beispiele hier verwenden die Domain https:// | ||
+ | |||
+ | |||
+ | ===== Einrichtungsübersicht für SAML 2.0 ===== | ||
+ | |||
+ | |||
+ | Um eine Webanwendung eines Drittanbieters so einzurichten, | ||
+ | |||
+ | - [[#Eine grundlegende Einrichtung für Admidio als SAML-IdP|Allgemeine Einrichtung des IdP in Admidio]]: | ||
+ | - Erstellen eines kryptografischen Schlüssels zum Signieren/ | ||
+ | - Auswahl einer eindeutigen entityID (typischerweise die URL der Admidio-Installation) | ||
+ | - [[# | ||
+ | - Im einfachsten Fall die Metadaten-URL in die Client-Konfiguration einfügen | ||
+ | - Wenn der Client die automatische Einrichtung mittels Metadaten nicht unterstützt, | ||
+ | - Admidio URLs für Single-Sign-On (SSO) und Single-Log-Out (SLO) | ||
+ | - Öffentlicher Schlüssel / Zertifikat des Admidio IdP. | ||
+ | - Wählen Sie eine eindeutige " | ||
+ | - [[# | ||
+ | - Erstellen eines neuen SAML-Clients in der SSO-Client-Administration von Admidio (" | ||
+ | - Idealerweise stellt der Client (" | ||
+ | - Andernfalls die Client-ID, die URL, zu der der Benutzer nach dem Login umgeleitet werden soll (ACS-URL), sowie ein optionales kryptografisches Zertifikat, das vom Client zum Signieren von Nachrichten verwendet wird, manuell kopieren/ | ||
+ | - In vielen Fällen funktioniert die automatische Einrichtung über Metadaten, aber es ist möglich, weitere Konfigurationen hinzuzufügen, | ||
+ | |||
+ | Diese Seite beschreibt die generische Einrichtung eines Admidio- und eines SAML 2.0-Clients. Sie wurde mit mehreren SAML-fähigen Anwendungen getestet, und clientspezifische Anweisungen sind auf separaten Seiten verfügbar. | ||
+ | |||
+ | |||
+ | ==== Einrichtungsübersicht für OpenID Connect ==== | ||
+ | |||
+ | |||
+ | Um eine Webanwendung eines Drittanbieters (die " | ||
+ | |||
+ | - [[#Eine grundlegende Einrichtung für Admidio als OpenID Connect IdP|Allgemeine Einrichtung des OIDC IdP in Admidio]]: | ||
+ | - Erstellen eines kryptografischen Schlüssels zum Signieren/ | ||
+ | - Auswahl einer eindeutigen entityID (typischerweise die URL der Admidio-Installation) | ||
+ | - [[# | ||
+ | - Im einfachsten Fall die Metadaten-URL in die Client-Konfiguration einfügen | ||
+ | - Wenn der Client die automatische Einrichtung mittels Metadaten nicht unterstützt, | ||
+ | - Admidio URLs (Endpunkte) für Autorisierung, | ||
+ | - Öffentlicher Schlüssel / Zertifikat des Admidio IdP. | ||
+ | - Wählen Sie eine eindeutige " | ||
+ | - Wählen Sie die Scopes (Informationsklassen) aus, die Admidio an den Client senden soll (z.B. " | ||
+ | - Optional ein Mapping der OpenID Claims (einzelne Datenfelder) auf die Profilfelder des Clients | ||
+ | - [[# | ||
+ | - Erstellen eines neuen OIDC-Clients in der SSO-Client-Administration von Admidio (" | ||
+ | - Die " | ||
+ | - Admidio zeigt ein " | ||
+ | - Wählen Sie aus, welche Scopes (Informationsklassen) an den Client gesendet werden dürfen, und wählen/ | ||
+ | - OpenID bietet KEINE automatische Konfiguration des Clients mittels Metadaten((Es gibt eine OpenID-Erweiterungsspezifikation für die dynamische/ | ||
+ | |||
+ | Diese Seite beschreibt die generische Einrichtung eines Admidio- und eines OpenID-Clients. Sie wurde mit mehreren OpenID-fähigen Anwendungen getestet, und clientspezifische Anweisungen sind auf separaten Seiten verfügbar. | ||
+ | |||
+ | |||
+ | |||
+ | ====== Wie funktioniert Single-Sign-On? | ||
+ | |||
+ | ===== Traditionelles Login ===== | ||
+ | |||
+ | {{ : | ||
+ | Der Standard-Login-Prozess für eine Anwendung (den " | ||
+ | |||
+ | - Der Benutzer klickt auf " | ||
+ | - Die Anwendung bestimmt, ob der Benutzer Zugriff hat: Sie zeigt ein Anmeldeformular an, prüft den eingegebenen Benutzernamen und das Passwort (Hash), und wenn diese existieren und übereinstimmen, | ||
+ | - Die Anwendung weiß nun, dass der Benutzer erfolgreich angemeldet ist und erstellt eine entsprechende Sitzung, um den Benutzer angemeldet zu halten. | ||
+ | |||
+ | Schritt 2 wird in diesem Fall von der Anwendung durchgeführt, | ||
+ | |||
+ | |||
+ | ===== Single-Sign-On mit SAML 2.0 unter Verwendung eines externen Identity Providers (IdP) ===== | ||
+ | |||
+ | Es gibt zwei etablierte technische Protokolle für Single-Sign-On: | ||
+ | |||
+ | SAML 2.0 basiert auf XML-Nachrichten und lagert im Grunde nur das Anmeldeformular und die daraus resultierende Anmeldeentscheidung an den IdP aus. Wenn der Login erfolgreich ist, sendet der IdP diese Informationen (zusammen mit dem Benutzernamen und optional weiteren Profilfeldern) als kryptografisch signiertes XML an den SAML-Client. | ||
+ | |||
+ | Im SAML-Fall ändert sich der oben beschriebene Login-Flow wie folgt. Aus Benutzersicht werden jedoch die gleichen Schritte der Passworteingabe durchgeführt, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | - Der Benutzer klickt auf " | ||
+ | - Die Anwendung bestimmt den Benutzer-Login nicht selbst. Stattdessen verlässt sie sich auf einen Drittanbieter (den " | ||
+ | - Sie erstellt ein XML mit einer XML " | ||
+ | - Wenn der Benutzer nicht bei Admidio angemeldet ist, wird der Anmeldebildschirm angezeigt. | ||
+ | - Admidio prüft die Anmeldung des Benutzers (und ob der Benutzer Mitglied der erlaubten Gruppen ist). | ||
+ | - Wenn der Login erfolgreich ist (oder der Benutzer bereits angemeldet war), sollte der Zugriff gewährt werden. Dies wird in XML-Daten (der " | ||
+ | - Neben dem Benutzernamen kann die an den SP zurückgegebene Assertion auch weitere Benutzerinformationen (E-Mail, Vor-/ | ||
+ | - Die Client-Anwendung (Service Provider) weiß nun, dass der Benutzer erfolgreich bei Admidio angemeldet ist, und erstellt eine entsprechende Sitzung, um den Benutzer angemeldet zu halten. | ||
+ | |||
+ | Es gibt einige Dinge zu beachten, wie die SAML-Authentifizierung funktioniert: | ||
+ | |||
+ | - Die gesamte **Passwortverwaltung** und -anforderung erfolgt **ausschließlich durch Admidio**. Der Service Provider (Client-Anwendung) empfängt, fragt oder muss niemals Passwörter verarbeiten. | ||
+ | - Es ist äußerst wichtig sicherzustellen, | ||
+ | - Der **IdP und der SP kommunizieren niemals direkt**, sondern nur über den Browser des Benutzers! Folglich können sich der IdP und der SP in getrennten Netzwerken befinden, z.B. kann der IdP sogar in einem privaten Netzwerk ohne Zugriff aus dem Internet sein, solange der Browser des Benutzers eine Verbindung zu ihm herstellen kann. | ||
+ | |||
+ | |||
+ | |||
+ | ===== Single-Sign-On mit OpenID Connect unter Verwendung eines externen Identity Providers (IdP) ===== | ||
+ | |||
+ | OpenID Connect basiert auf dem Austausch von Daten mit JSON-Objekten. Es ist eine Erweiterung des OAuth 2.0-Protokolls, | ||
+ | |||
+ | Anstatt nur mit Browser-Weiterleitungen wie SAML zu arbeiten, basiert OpenID auf OAuth und nutzt ausgiebig die direkte Kommunikation (" | ||
+ | |||
+ | <WRAP center round todo 60%> | ||
+ | todo box | ||
+ | </ | ||
+ | |||
+ | |||
+ | ====== Setting up SSO via SAML 2.0 ====== | ||
+ | ===== A. Basic Setup for Admidio as a SAML ID Provider ===== | ||
+ | |||
+ | Admidio' | ||
+ | {{ : | ||
+ | ==== 1. Generating a Cryptographic Key for Signing and Encryption ==== | ||
+ | |||
+ | * The first thing to do is to create a cryptographic key (typically an RSA key with 2048 bit). For this, use the "SSO cryptographic Keys Administration" | ||
+ | * {{ : | ||
+ | * Also enter the URL of the Admidio installation as " | ||
+ | {{ : | ||
+ | * The key should now be listed and activated. Return | ||
+ | | ||
+ | ==== 2. Configuring Admidio as IdP ==== | ||
+ | |||
+ | * In the SSO section of the preferences, | ||
+ | * **SAML Entity ID**: The URL of your installation (needs to be a **unique ID**, the URL is usually used, but not required) | ||
+ | * **Key for signatures**: | ||
+ | * Key for **Encryption**: | ||
+ | * Select whether Admidio adivses all SPs to sign their messages in turn. This requires each client to have a cryptographic key generated for itself, which some clients (e.g. DokuWiki) do not support. Clients that do not support signatures, will still work, this is just a declaration of preference by Admidio! | ||
+ | * Save | ||
+ | {{ : | ||
+ | |||
+ | The Preferences page also lists all the relevant data to set up the client as a Service Provider. Particularly useful will be the Metadata URL, which provides all data to set up a client (SP) in XML format. You don't need to do anything, the SSO plugin for Admidio provides this out of the box. Here is an example of such a metadata xml: | ||
+ | {{ : | ||
+ | Notice that it contains both the public key / certificate of the signing and encryption keys, as well as the URLs to the SingleSignOnService (SSO) and the SingleLogOutService (SLO) at the admidio installation. Furthermore, | ||
+ | |||
+ | |||
+ | Admidio is now **ready to provide single-sign-on functionality to Service Providers**. | ||
+ | |||
+ | Each SP first needs to be set up with the URLs (and keys) to connect to Admidio. This can ideally be done by providing the SP with the link to the metadata. After that, Admidio needs to be configured to accept login requests from the SP. Again, each SP typically provides the required data as a metadata XML, which can be loaded in Admidio to set up the client for Single-sign-on functionality. The details depend on the actual client app. | ||
+ | |||
+ | |||
+ | ===== B. Configuring an App (Service Provider) to use SSO with Admidio ===== | ||
+ | |||
+ | Once Admidio is set up to act as a SAML 2.0 IdP, the clients (Service Providers, " | ||
+ | |||
+ | * **Metadata URL** (optional; for automatic setup of clients): https:// | ||
+ | * If your SP supports entering and loading the metadata XML, make sure to use it. It will load the correct settings from the SAML IdP and set up most settings correctly! | ||
+ | * **IdP SAML Entity ID** (unique identifier of the Admidio instance): https:// | ||
+ | * **SSO Endpoint** (where the SP sends the login request): https:// | ||
+ | * **SLO Endpoint** (where logout requests are sent to): https:// | ||
+ | * **x509 Certificate** (to allow clients to verify the cryptographic signatures): | ||
+ | |||
+ | * **User attribute mapping**: Which SAML attributes returned with the login confirmation (" | ||
+ | |||
+ | In addition each client typically has settings to require sent or received SAML messages to be signed and/or encrypted to ensure a secure login process. The details depend on the capabilities of the client. Some clients do not support encryption, other require all SAML messages to be signed (for good reason!). | ||
+ | Also, some clients offer a setting that SAML login is only possible for users that are already manually created in the SP, while others offer a setting to automatically create user accounts on successful SAML login. | ||
+ | |||
+ | The details always depend on the particular client. See the client-specific instructions for details for a particular client. Other clients should work, too, if they properly implement SAML. The configuration will be similar to the documented clients. | ||
+ | |||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | |||
+ | |||
+ | ===== C. Configuring Admidio with the Service Provider ===== | ||
+ | |||
+ | Once the client is set up to send authentication requests to Admidio, Admidio needs to be configured to respond to them. All SAML clients (Service Providers) are configured in the SSO Client Administration page, which can be reached from the SSO Preferences page (https:// | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | To ensure only legitimate login requests from the real client are processed, Admidio needs the entity ID, the URL for redirect as well as the x509 certificate (if messages are cryptographically signed). The following settings are needed for setup. They MUST be consistent with the settings configured in the SAML client (SP). Many SPs provide a Metadata XML link or file with all required settings included for automatic client setup. In Admidio' | ||
+ | |||
+ | * **Metadata URL** (for automatic setup of clients): | ||
+ | * If your SP provides a metadata URL, make sure to use it. It will load the correct settings from the SAML SP and set up most settings correctly!{{ : | ||
+ | * **Client ID** (unique identifier of the Client) | ||
+ | * **ACS URL** (where responses to login requests are sent to) | ||
+ | * **Single-Log-Out URL** (optional): Backchannel endpoint to log out from all clients | ||
+ | * **x509 Certificate** (to allow verification of the messages sent by the SP): PEM-format needs to be copied out from the client | ||
+ | |||
+ | * **User ID field**: Whether the client gets the numeric Admidio user id, the globally unique UUID, or the user's login name as user ID | ||
+ | * Further **profile data/ | ||
+ | * Which **roles / group memberships** are sent to the client on successful login. The data fields and groups can be mapped to different names, if the client cannot handle Admidio' | ||
+ | |||
+ | In addition each client typically has settings to require sent or received SAML messages to be signed and/or encrypted to ensure a secure login process. The details depend on the capabilities of the client. Some clients do not support encryption, other require all SAML messages to be signed (for good reason!). | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | |||
+ | ====== Setting up SSO via OpenID Connect (OIDC) ====== | ||
+ | |||
+ | ===== A. Basic Setup for Admidio as an OpenID Connect ID Provider ===== | ||
+ | |||
+ | |||
+ | Admidio' | ||
+ | {{ : | ||
+ | |||
+ | ==== 1. Generating a Cryptographic Key for Signing and Encryption ==== | ||
+ | |||
+ | * The first thing to do is to create a cryptographic key (typically an RSA key with 2048 bit). If SAML 2.0 and OpenID are used, they can share the same RSA key. | ||
+ | * To manage keys, use the "SSO cryptographic Keys Administration" | ||
+ | * {{ : | ||
+ | * Also enter the URL of the Admidio installation as " | ||
+ | {{ : | ||
+ | * The key should now be listed and activated. Return | ||
+ | | ||
+ | ==== 2. Configuring Admidio as OpenID Connect IdP ==== | ||
+ | |||
+ | * In the SSO section of the preferences, | ||
+ | * **Issuer**: The URL of your installation (needs to be a **unique ID**, the URL is usually used; Some clients require this to the the base URL, others accept any random string) | ||
+ | * **Key for signatures**: | ||
+ | * Save | ||
+ | {{ : | ||
+ | |||
+ | The Preferences page also lists all the relevant URLs (endpoints) to set up the client as a Relying Party. Particularly useful will be the Discovery URL, which provides all data to set up a client (RP) in JSON format. If an app supports automatic discovery, this will automatically do the basic setup. Otherwise you will have to copy the provided endpoint URLs to the client' | ||
+ | {{ : | ||
+ | |||
+ | In contrast to SAML, the metadata does not contain the public certificate. In OpenID, there is a separate endpoint (the " | ||
+ | Also notice that the discovery document lists all allowed scopes and technical details about the internal OpenID settings. | ||
+ | |||
+ | Admidio is now **ready to provide single-sign-on functionality to Relying Parties**. | ||
+ | |||
+ | Each RP first needs to be set up with the URLs to connect to Admidio. This can ideally be done by providing the RP with the discovery link. After that, Admidio needs to be configured to accept login requests from the RP. Unfortunately, | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== B. Configuring an App (Relying Party) to use SSO with Admidio ===== | ||
+ | |||
+ | |||
+ | Once Admidio is set up to act as an OpenID IdP, the clients (Relying Parties, " | ||
+ | |||
+ | * **Discovery URL** (optional; for automatic setup of clients): https:// | ||
+ | * If your RP supports auto-configuration, | ||
+ | * **IdP Isuer** (unique identifier of the Admidio instance): https:// | ||
+ | * **Authorization Endpoint** (where the RP sends the login request): https:// | ||
+ | * **Token Endpoint** (where the RP sends requests to convert an auth code to a token, i.e. an app-specific password replacement): | ||
+ | * **Userinfo Indpoint** (where the RP can request details about the user): | ||
+ | * **Scopes** (which groups of profile data are requested by the client): Any of openid (required), profile, address, phone, email, custom, groups, roles | ||
+ | * **User attribute mapping**: Which data fields (OpenID claims) returned by Admidio correspond to the login name, the full name, the email and possibly the user's group memberships in the RP system. | ||
+ | |||
+ | In addition each client typically has settings to for further customization. | ||
+ | Also, some clients offer a setting that SAML login is only possible for users that are already manually created in the RP, while others offer a setting to automatically create user accounts on successful SAML login. | ||
+ | |||
+ | The details always depend on the particular client. See the client-specific instructions for details for a particular client. Other clients should work, too, if they properly implement SAML. The configuration will be similar to the documented clients. | ||
+ | |||
+ | |||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | |||
+ | |||
+ | ===== C. Configuring Admidio with the Relying Party ===== | ||
+ | |||
+ | |||
+ | Once the client is set up to send authentication requests to Admidio, Admidio needs to be configured to respond to them. All OpenID clients (Relying Parties) are configured in the SSO Client Administration page, which can be reached from the SSO Preferences page (https:// | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | To ensure only legitimate login requests from the real client are processed, Admidio needs the entity ID and the Redirect URI. In addition, Admidio will generate a Client Secret (a random string) that needs to be copied to the client' | ||
+ | The following settings are needed for setup. They MUST be consistent with the settings configured in the OpenID Connect client (RP). | ||
+ | |||
+ | * **Client ID** (unique identifier of the client): typically the URL of the OpenID client (RP)((Some RPs use basic auth by default, which does not allow special characters in the username. In this case, the URL MUST NOT be used, as this will prevent successful login! Other OpenID clients hardcode the client ID as their URL.)) | ||
+ | * **Client Secret** (basically the client' | ||
+ | * **Redirect URI** (where the user is redirected after successful login) | ||
+ | |||
+ | * **User ID field**: Whether the client gets the numeric Admidio user id, the globally unique UUID, or the user's login name as user ID | ||
+ | * **Permitted scopes**: OpenID defines certain groups of profile data, for which permission can be granted. The RP will include the scopes it is interested in in its login request, and the OpenID Provider (OP, Admidio in our case) will return the profile fields (" | ||
+ | * Further **profile data/ | ||
+ | * Which **roles / group memberships** are sent to the client on successful login. The data fields and groups can be mapped to different names, if the client cannot handle Admidio' | ||
+ | |||
+ | In addition each client typically has some more settings regarding fields <=> claims mapping, groups, auto-generating accounts for new logins, etc. The details depend on the capabilities of the client. | ||
+ | |||
+ | {{: | ||