This guide summarizes key configuration topics for the OIDC module.
It complements the inline comments in config/module_oidc.php.
- Caching protocol artifacts
- Relying Party (RP) administration UI
- Cron integration
- Endpoint locations and well-known URLs
- Key rollover
- Apache Authorization header note
- Private scopes
- Attribute translation
- Auth Proc filters (OIDC)
- Client registration permissions
The configured database is the primary storage for protocol artifacts: access tokens, authorization codes, refresh tokens, clients, and user records. In production, you should also configure a cache in front of the DB to improve performance during traffic spikes.
Caching uses Symfony Cache, so any compatible adapter can be used. See the
module_oidc.php configuration file for adapter selection and parameters.
The module provides a UI to manage clients (create, read, update, delete). After you create the database schema, go to the SimpleSAMLphp admin area:
- OIDC > Client Registry
Notes:
- Clients can be public or confidential.
- Public clients using Authorization Code flow must send PKCE parameters.
- Client ID and secret are generated; use the "show" button to reveal.
Enable and configure the SimpleSAMLphp cron module to purge expired tokens: cron
After deployment, visit the SimpleSAMLphp admin area:
- OIDC > Protocol / Federation Settings
There you can see discovery URLs. Typical discovery endpoints are:
- OpenID Connect Discovery: https://yourserver/simplesaml/module.php/oidc/.well-known/openid-configuration
- OpenID Federation configuration: https://yourserver/simplesaml/module.php/oidc/.well-known/openid-federation
You may publish these as ".well-known" URLs at the web root using your
web server. For example, for openid-configuration:
nginx:
location = /.well-known/openid-configuration {
rewrite ^(.*)$ /simplesaml/module.php/oidc/.well-known/openid-configuration break;
proxy_pass https://localhost;
}Apache:
RewriteEngine On
RewriteRule ^/.well-known/openid-configuration(.*) \
/simplesaml/module.php/oidc/.well-known/openid-configuration$1 [PT]You can configure an additional key pair to publish via JWKS endpoints or properties. This lets RPs pre-fetch the new public key before you switch signing to the new private key. Once RPs have cached the new JWKS, you can perform the key switch.
Apache may strip the Authorization header (Bearer) from requests (a known
issue).
Although the module includes a fallback, it has performance implications. Configure Apache to preserve the header using one of these snippets:
RewriteEngine On
RewriteCond %{HTTP:Authorization} .+
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]or
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1If not set, you will see warnings about this in the logs.
The module supports the standard scopes: openid, email, address,
phone, and profile. You can add private scopes in module_oidc.php:
<?php
$config = [
\SimpleSAML\Module\oidc\ModuleConfig::OPTION_AUTH_CUSTOM_SCOPES => [
'private' => [
'description' => 'private scope',
'claim_name_prefix' => '',
'are_multiple_claim_values_allowed' => false,
'attributes' => ['national_document_id'],
],
],
];Default SAML-to-OIDC claim mapping follows the REFEDS guidance.
You can change or extend this mapping in module_oidc.php. Example:
<?php
$config = [
\SimpleSAML\Module\oidc\ModuleConfig::OPTION_AUTH_SAML_TO_OIDC_TRANSLATE_TABLE => [
// Overwrite default mapping
'sub' => [
'uid',
'eduPersonPrincipalName',
'eduPersonTargetedID',
'eduPersonUniqueId',
],
// Remove default mapping by setting an empty array
'family_name' => [],
// New claim created from SAML attribute
'national_document_id' => [
'schacPersonalUniqueId',
],
],
];Standard SAML Auth Proc Filters do not run during OIDC authN because not
all SAML entities are present (like a Service Provider). Instead, use the
authproc.oidc configuration option to define filters specific to OIDC.
The OIDC authN state does not include all keys present in SAML authN. Available SAML-like keys include:
- ['Attributes']
- ['Authority']
- ['AuthnInstant']
- ['Expire']
Source and Destination entity IDs correspond to OP issuer and Client ID:
- ['Source']['entityid'] → OP issuer ID
- ['Destination']['entityid'] → RP (client) ID
Additional OIDC data in the state:
- ['Oidc']['OpenIdProviderMetadata']
- ['Oidc']['RelyingPartyMetadata']
- ['Oidc']['AuthorizationRequestParameters']
Example filter configuration:
<?php
$config = [
\SimpleSAML\Module\oidc\ModuleConfig::OPTION_AUTH_PROCESSING_FILTERS => [
50 => [
'class' => 'core:AttributeAdd',
'groups' => ['users', 'members'],
],
],
];You can allow users to register their own clients. Control this via the
permissions setting in module_oidc.php.
Permissions expose functionality to specific users. In the following
example, a user's eduPersonEntitlement is examined. To perform an action
requiring the client permission (register/edit/delete a client) the user
needs one of the listed entitlements.
<?php
$config = [
\SimpleSAML\Module\oidc\ModuleConfig::OPTION_ADMIN_UI_PERMISSIONS => [
'attribute' => 'eduPersonEntitlement',
'client' => ['urn:example:oidc:manage:client'],
],
];Users can visit the following link for administration: