Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
en:2.0:single_sign_on [2025/05/04 08:44] – [Single-Sign-On using Admidio's User Accounts: SAML 2.0 and OpenId Connect] kainhofer | en:2.0:single_sign_on [2025/05/09 00:21] (current) – kainhofer | ||
---|---|---|---|
Line 19: | Line 19: | ||
| | | | ||
- | Other systems like Prestashop do not provide any freely available SAML plugin, only some very expensive commercial extensions. | + | Other systems like Prestashop do not provide any freely available SAML or OpenID |
Line 30: | Line 30: | ||
- Create a cryptographic key for signing/ | - Create a cryptographic key for signing/ | ||
- Choose a unique entityID (typically the URL of the Admidio installation) | - Choose a unique entityID (typically the URL of the Admidio installation) | ||
- | - [[# | + | - [[# |
- In the simplest case, paste the metadata URL into the client configuration | - In the simplest case, paste the metadata URL into the client configuration | ||
- If the client does not support auto-setup using metadata, manually copy/enter the settings: | - If the client does not support auto-setup using metadata, manually copy/enter the settings: | ||
Line 63: | Line 63: | ||
- Admidio will show a " | - Admidio will show a " | ||
- Select which scopes (classes of information) should be allowed to be sent to the client, and optionally select / map Admidio' | - Select which scopes (classes of information) should be allowed to be sent to the client, and optionally select / map Admidio' | ||
- | - OpenID does NOT provide any automatic configuration of the client using metadata((There is an OpenID extension for dynamic/ | + | - OpenID does NOT provide any automatic configuration of the client using metadata((There is an OpenID extension |
Line 86: | Line 86: | ||
There are two established technical protocols for Single-Sign-On: | There are two established technical protocols for Single-Sign-On: | ||
+ | |||
+ | SAML 2.0 is based on XML messages, and basically just outsources the login form and the resulting login success decision to the IdP. If login is successful, the IdP sends this information (together with the user name and optionally some further profile fields) as a cryptographically signed XML to the SAML client. | ||
In the SAML case, the login flow above changes to the following. But but from a user perspective, | In the SAML case, the login flow above changes to the following. But but from a user perspective, | ||
Line 104: | Line 106: | ||
- It is extremely important to ensure that the requests are really sent to the right system and the returned responses really originate from the authorized IdP. This can be assured by using **public key cryptography**, | - It is extremely important to ensure that the requests are really sent to the right system and the returned responses really originate from the authorized IdP. This can be assured by using **public key cryptography**, | ||
- The **IdP and the SP never communicate directly**, only through the user's browser! As a consequence, | - The **IdP and the SP never communicate directly**, only through the user's browser! As a consequence, | ||
+ | |||
+ | ==== Single-Sign-On with OpenID Connect using an external Identity Provider (IdP) ==== | ||
+ | |||
+ | OpenID Connect is based on exchanging data with JSON objects. It is an extension of the OAuth 2.0 protocol, which only handles authentication. The OpenID layer adds additional profile information and permissions, | ||
+ | |||
+ | Rather than working only with browser redirects like SAML, OpenID is based on OAuth and extensively uses direct communication (" | ||
+ | |||
+ | |||
+ | <WRAP center round todo 60%> | ||
+ | todo box | ||
+ | </ | ||
Line 137: | Line 150: | ||
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. | 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. | ||
- | |||
- | Here we show the setup at the examples of: | ||
- | * [[# | ||
- | * [[# | ||
- | * [[# | ||
Line 148: | Line 156: | ||
Once Admidio is set up to act as a SAML 2.0 IdP, the clients (Service Providers, " | 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:// | + | * **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! | * 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:// | * **IdP SAML Entity ID** (unique identifier of the Admidio instance): https:// | ||
- | * **SSO Endpoint** (where the SP sends the login request): https:// | + | * **SSO Endpoint** (where the SP sends the login request): https:// |
- | * **SLO Endpoint** (where logout requests are sent to): https:// | + | * **SLO Endpoint** (where logout requests are sent to): https:// |
* **x509 Certificate** (to allow clients to verify the cryptographic signatures): | * **x509 Certificate** (to allow clients to verify the cryptographic signatures): | ||
Line 160: | Line 168: | ||
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. | 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. | + | The details always depend on the particular client. |
+ | |||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
+ | [[en: | ||
===== C. Configuring Admidio with the Service Provider ===== | ===== 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:// | + | 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:// |
{{ : | {{ : | ||
Line 171: | Line 190: | ||
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' | 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): | + | * **Metadata URL** (for automatic setup of clients): |
- | * If your SP supports entering and loading the metadata | + | * If your SP provides a metadata |
- | * **IdP SAML Entity | + | * **Client |
- | * **SSO Endpoint** (where | + | * **ACS URL** (where |
- | * **SLO Endpoint** (where logout requests are sent to): https:// | + | * **Single-Log-Out URL** (optional): Backchannel endpoint to log out from all clients |
- | * **x509 Certificate** (to allow clients to verify | + | * **x509 Certificate** (to allow verification of the messages sent by the SP): PEM-format needs to be copied out from the client |
- | * **User ID**: Whether the client gets the numeric Admidio user id, the globally unique UUID, or the user's login name as user ID | + | * **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/ | * 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' | * 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' | ||
Line 192: | Line 211: | ||
===== A. Basic Setup for Admidio as an OpenID Connect ID Provider ===== | ===== A. Basic Setup for Admidio as an OpenID Connect ID Provider ===== | ||
- | <WRAP center round todo 60%> | + | |
- | todo box | + | 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 ===== | ===== B. Configuring an App (Relying Party) to use SSO with Admidio ===== | ||
- | <WRAP center round todo 60%> | + | |
- | todo box | + | Once Admidio is set up to act as an OpenID IdP, the clients (Relying Parties, " |
- | </WRAP> | + | |
+ | * **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 ===== | ===== C. Configuring Admidio with the Relying Party ===== | ||
- | <WRAP center round todo 60%> | ||
- | todo box | ||
- | </ | ||
+ | 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. | ||
+ | |||
+ | {{: | ||