Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,17 @@ jobs:
- name: Run form_post implicit tests
run: |
./conformance-suite/scripts/run-test-plan.py "oidcc-formpost-implicit-certification-test-plan[server_metadata=discovery][client_registration=static_client]" ./main/conformance-tests/conformance-implicit-ci.json
- name: Run Dynamic registration conformance tests
# Non-blocking: the dynamic plan also re-exercises several OP-wide
# behaviours (signed UserInfo, key rotation, request_uri/jwks_uri fetched
# over the suite's self-signed cert, etc.) that are not Dynamic Client
# Registration and are not all passing in this docker setup. The known
# non-passing tests, and why, are inventoried in
# conformance-tests/dynamic-skips.json and docs/5-oidc-conformance.md.
# The DCR functionality itself passes; review the step log for details.
continue-on-error: true
run: |
./conformance-suite/scripts/run-test-plan.py --expected-failures-file ./main/conformance-tests/dynamic-warnings.json --expected-skips-file ./main/conformance-tests/dynamic-skips.json "oidcc-dynamic-certification-test-plan[response_type=code]" ./main/conformance-tests/conformance-dynamic-ci.json
- name: Stop SSP
working-directory: ./main
run: |
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
"psr/container": "^2.0",
"psr/log": "^3",
"simplesamlphp/composer-module-installer": "^1.3",
"simplesamlphp/openid": "~v0.3.5",
"simplesamlphp/openid": "~0.3.7",
"spomky-labs/base64url": "^2.0",
"symfony/expression-language": "^7.4",
"symfony/psr-http-message-bridge": "^7.4",
Expand Down
79 changes: 79 additions & 0 deletions config/module_oidc.php.dist
Original file line number Diff line number Diff line change
Expand Up @@ -570,6 +570,85 @@ $config = [
*/
ModuleConfig::OPTION_ADMIN_UI_PAGINATION_ITEMS_PER_PAGE => 20,

/***************************************************************************
* (optional) OpenID Connect Dynamic Client Registration (DCR) related
* options. If not enabled (the default), Dynamic Client Registration
* capabilities will be disabled.
**************************************************************************/

/**
* Enable or disable OpenID Connect Dynamic Client Registration (DCR), as
* described in the OpenID Connect Dynamic Client Registration 1.0
* specification (which is also compatible with RFC 7591). Default is
* disabled (false).
*
* When enabled, the module serves:
* - a Client Registration Endpoint (HTTP POST to .../oidc/register) which
* creates a new client from the supplied client metadata and returns its
* client_id, client_secret (for confidential clients), a
* registration_access_token and a registration_client_uri; and
* - a Client Configuration Endpoint (HTTP GET to
* .../oidc/register?client_id=...) which returns the current client
* registration when called with the registration_access_token as an HTTP
* Bearer token.
*
* When enabled, the registration endpoint is also advertised as the
* 'registration_endpoint' claim in the OP discovery metadata.
*
* Note that dynamically registered clients are stored like any other client
* and are visible / manageable in the admin UI.
*/
ModuleConfig::OPTION_DCR_ENABLED => false,

/**
* Access-control mode for the registration (create) endpoint. Only relevant
* if Dynamic Client Registration is enabled. Possible values:
*
* - DcrRegistrationAuthEnum::Open (the default): open registration, meaning
* anyone may register a client without authenticating. In this mode you
* should protect the endpoint from abuse using rate limiting at the
* web-server level.
* - DcrRegistrationAuthEnum::InitialAccessToken: callers must present a
* valid Initial Access Token (provisioned out-of-band) as an HTTP Bearer
* token to register. The accepted tokens are configured using
* the OPTION_DCR_INITIAL_ACCESS_TOKENS option below.
*/
ModuleConfig::OPTION_DCR_REGISTRATION_AUTH =>
\SimpleSAML\Module\oidc\Codebooks\DcrRegistrationAuthEnum::Open->value,

/**
* Allowlist of Initial Access Tokens (opaque, randomly generated strings)
* accepted by the registration endpoint. This option is only consulted when
* the access mode (OPTION_DCR_REGISTRATION_AUTH) is set to
* DcrRegistrationAuthEnum::InitialAccessToken; in 'open' mode it is ignored.
*
* A registration request must then carry one of these tokens as an HTTP
* Bearer token. Use long, high-entropy values and treat them as secrets.
*
* Format: string[] (array of strings)
*/
ModuleConfig::OPTION_DCR_INITIAL_ACCESS_TOKENS => [
// 'a-long-random-secret-token',
],

/**
* Enable or disable impersonation protection for Dynamic Client
* Registration, as recommended by Section 9.1 of the OpenID Connect Dynamic
* Client Registration 1.0 specification. Default is enabled (true).
*
* When enabled, the host component of the logo_uri, policy_uri and tos_uri
* client metadata values (if provided) must match the host of one of the
* registered redirect_uris. Otherwise, the registration is rejected with an
* 'invalid_client_metadata' error. This mitigates a rogue client trying to
* impersonate a legitimate one by reusing its branding (logo) or links.
*
* You may want to disable this (set to false) if your clients legitimately
* host these resources on a different domain than their redirect URIs (for
* example, on a shared CDN or marketing domain). Note that the client_uri
* (the client home page) is intentionally NOT subject to this check.
*/
ModuleConfig::OPTION_DCR_IMPERSONATION_PROTECTION_ENABLED => true,

/***************************************************************************
* (optional) OpenID Federation-related options. If these are not set,
* OpenID Federation capabilities will be disabled.
Expand Down
Loading
Loading