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 [2026/09/03 22:54] – [Setup overview for SAML 2.0] kainhofer | en:2.0:single_sign_on [2026/09/11 09:29] (current) – [C. Configuring Admidio with the Relying Party] kainhofer | ||
|---|---|---|---|
| Line 42: | Line 42: | ||
| - [[# | - [[# | ||
| - Enable SAML 2.0 | - Enable SAML 2.0 | ||
| - | - Choose a unique entityID (typically the URL of the Admidio installation) | + | - Choose a unique entityID |
| - Save (a cryptographic key for signatures and encryption will be generated automatically ) | - Save (a cryptographic key for signatures and encryption will be generated automatically ) | ||
| - [[# | - [[# | ||
| Line 60: | Line 60: | ||
| ===== Setup overview for OpenID Connect ===== | ===== Setup overview for OpenID Connect ===== | ||
| - | To set up a third-party | + | To set up a web application (the " |
| - [[# | - [[# | ||
| - | - Create a cryptographic key for signing/ | + | - Enable OIDC support in Admidio |
| - | - Choose a unique entityID (typically | + | - The issuer URL should be left empty in most cases, i.e. the URL of the Admidio installation |
| - | - [[# | + | - A cryptographic key for signatures and encryption will be generated automatically if needed, there is no need to generate or select one manually (in the advanced settings) |
| - | - In the simplest case, paste the metadata | + | - Save |
| - | - If the client does not support auto-setup using metadata, manually | + | - [[# |
| - | - Admidio URLs (endpoints) for authorization, | + | provides |
| - | - Public key / certificate of the Admidio IdP. | + | - If the client supports it, paste the discovery |
| + | - Otherwise | ||
| - Choose a unique " | - Choose a unique " | ||
| - | - Select the scopes (classes of information) that Admidio should send to the client | + | - The client |
| - | - Optionally | + | |
| - [[# | - [[# | ||
| - Create a new OIDC client in Admidio' | - Create a new OIDC client in Admidio' | ||
| - Paste the " | - Paste the " | ||
| - | - 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 | + | - Many simple OIDC clients do not support PKCE. If you get an error message that the client requires PKCE, disable PKCE in Admidio' |
| - | - OpenID does NOT provide any automatic configuration of the client using metadata((There is an OpenID extension specification for dynamic/ | + | - Select which scopes (classes of information) should be allowed to be sent to the client, and optionally select |
| + | - In contrast to SAML, OpenID does NOT provide any automatic configuration of the client using metadata((There is an OpenID extension specification for dynamic/ | ||
| Line 103: | Line 104: | ||
| 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. | 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, | ||
| - | {{ : | ||
| - User clicks on "Log In" | - User clicks on "Log In" | ||
| - The app does not determine user login itself. Instead it relies on a third party (the " | - The app does not determine user login itself. Instead it relies on a third party (the " | ||
| Line 144: | Line 145: | ||
| * Save | * Save | ||
| - | The Preferences page also lists all the relevant data to set up the client as a Service Provider. | + | The Preferences page also lists all the relevant data to set up the client as a Service Provider. |
| + | |||
| + | The SSO settings also provide an advanced section, where you can select or generate crypto keys for the signatures and encryption of the SAML messages. A default key will be generated automatically. | ||
| Admidio is now **ready to provide single-sign-on functionality to Service Providers**. | Admidio is now **ready to provide single-sign-on functionality to Service Providers**. | ||
| Line 209: | Line 212: | ||
| ===== B. Configuring an App (Service Provider) to use SSO with Admidio ===== | ===== 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, " | + | Once Admidio is set up to act as SAML 2.0 IdP, clients (Service Providers, " |
| * **Metadata URL** (optional; for automatic setup of clients): https:// | * **Metadata URL** (optional; for automatic setup of clients): https:// | ||
| Line 220: | Line 223: | ||
| * **User attribute mapping**: Which SAML attributes returned with the login confirmation (" | * **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!). | + | 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 |
| - | Also, some clients offer a setting that SAML login is only possible for users that are already manually | + | |
| + | Some clients also support Just-in-time user-provisioning (meaning | ||
| - | The details always depend on the particular client. | + | The details always depend on the particular client. |
| + | We have extensively tested Admidio' | ||
| [[en: | [[en: | ||
| Line 250: | Line 255: | ||
| * If the SP provides a metadata URL, paste it and load it. The URL will be stored and can be reloaded any time, in case the client changes its key or some other settings. {{ : | * If the SP provides a metadata URL, paste it and load it. The URL will be stored and can be reloaded any time, in case the client changes its key or some other settings. {{ : | ||
| * If the SP provides the metadata in XML format without an URL reachable from admidio, paste the XML code into the input field to parse it. The XML will not be stored by Admidio and must be pasted again if the client changes settings. | * If the SP provides the metadata in XML format without an URL reachable from admidio, paste the XML code into the input field to parse it. The XML will not be stored by Admidio and must be pasted again if the client changes settings. | ||
| + | |||
| + | |||
| === If your SAML client does not provide metadata === | === If your SAML client does not provide metadata === | ||
| - | If your client application does not provide SAML configuration as metadat | + | If your client application does not provide SAML configuration as metadata |
| * **Client ID** (unique identifier of the Client) | * **Client ID** (unique identifier of the Client) | ||
| * **ACS URL** (where responses to login requests are sent to) | * **ACS URL** (where responses to login requests are sent to) | ||
| Line 275: | Line 282: | ||
| Admidio' | Admidio' | ||
| - | {{ : | ||
| - | ==== 1. Generating a Cryptographic Key for Signing and Encryption ==== | + | {{:en:2.0: |
| + | {{: | ||
| - | | + | |
| - | * To manage keys, use the "SSO cryptographic Keys Administration" | + | |
| - | | + | - Save |
| - | * Also enter the URL of the Admidio installation as " | + | |
| - | {{ : | + | |
| - | | + | |
| - | + | ||
| - | ==== 2. Configuring Admidio as OpenID Connect IdP ==== | + | |
| - | * In the SSO section | + | The SSO settings also provide an advanced |
| - | * **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' | + | The Preferences page also lists all the relevant URLs (endpoints) to set up the client as a Relying Party. If client |
| - | {{ :en:2.0:sso:sso_oidc_01-06_setup_openid_metadata.png? | + | <code json> |
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | ], | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | </ | ||
| In contrast to SAML, the metadata does not contain the public certificate. In OpenID, there is a separate endpoint (the " | In contrast to SAML, the metadata does not contain the public certificate. In OpenID, there is a separate endpoint (the " | ||
| Line 310: | Line 341: | ||
| - | Once Admidio is set up to act as an OpenID | + | Once Admidio is set up to act as OpenID |
| * **Discovery URL** (optional; for automatic setup of clients): https:// | * **Discovery URL** (optional; for automatic setup of clients): https:// | ||
| * If your RP supports auto-configuration, | * If your RP supports auto-configuration, | ||
| - | * **IdP Isuer** (unique identifier of the Admidio instance): https:// | + | * **IdP Issuer** (unique identifier of the Admidio instance): https:// |
| * **Authorization Endpoint** (where the RP sends the login request): 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): | * **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): | * **Userinfo Indpoint** (where the RP can request details about the user): | ||
| + | * The (unique) **Client ID** and **Client Secret** must be entered identically in Admidio' | ||
| * **Scopes** (which groups of profile data are requested by the client): Any of openid (required), profile, address, phone, email, custom, groups, roles | * **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. | * **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. | ||
| Line 324: | Line 356: | ||
| 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. | 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. | + | The details always depend on the particular client. |
| Line 350: | Line 382: | ||
| * **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 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' | * **Client Secret** (basically the client' | ||
| - | * **Redirect URI** (where the user is redirected after successful login) | + | * **Redirect URI** (where the user is redirected after successful login). Many clients send an explicit URL where users are returned after a successful OIDC logout. To prevent security issues, only explicitly listed URLs are allowed. Multiple URLs can be given, one per line, and a **%%*%%** can be used as a placeholder (not allowed in the protocol or the domain name, only in the path after the domain). Some clients (like Wordpress) append variable options like the user's language. In that case, the placeholder should be used. |
| - | * **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 | + | * **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 to uniquely identify users. This is not the suggested login name in the client, but an internal identifier. |
| * **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 (" | * **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/ | * Further **profile data/ | ||