docs: document the OIDC audience parameter - #137
oc-tmueller wants to merge 1 commit into
Conversation
The openidconnect app gains an optional "audience" key naming the value the IdP puts into the access token's "aud" claim. It defaults to client-id, and is needed by IdPs that address the resource server instead - RFC 9068 §3 defines an access token's "aud" that way, and Microsoft ADFS follows it, prefixing the application identifier with "microsoft:identityserver:" unless that identifier is already a URL. Documented for 11.0 and 10.16, the two versions the app change ships on. The entry covers the operational consequences rather than just the syntax, because each of them is a way to lock an instance out: the audience becomes authoritative once set, so a token issued to another client of the same IdP is accepted when its "aud" matches, an introspection response that omits "aud" can no longer be used at all, and with token-exchange mode the first list entry is what gets requested from the IdP. Values that cannot be an audience are discarded, and if none is left every access token is rejected. For finding the ADFS value, both cmdlets are named: Get-AdfsWebApiApplication for an OpenID Connect application group, Get-AdfsRelyingPartyTrust for a legacy WS-Federation or SAML trust. Naming only the latter would strand admins whose OIDC registration is an application group, which is the modern default. No app version numbers are claimed: neither release carrying the fix is tagged yet, so the entry points at the issue instead. See owncloud/openidconnect#373 and owncloud/openidconnect#374 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Thomas Müller <323649642+oc-tmueller@users.noreply.github.com>
|
Converted to draft — do not merge as-is. I authored this by hand, and this page is generated.
The pipeline is live, not dead — core changelog What this PR becomes
Verified in the meantime: both pages here are currently byte-in-sync with core, so the regeneration will add only the new entry and no unrelated drift. Two side findings, each getting its own PR: 10.16's sibling page |
Documents the
audiencekey the openidconnect app gains in owncloud/openidconnect#374 (fixes owncloud/openidconnect#373).Why
An access token is accepted only if it names the ownCloud relying party. Until now the expected value was always the configured
client-id— which is the ID token rule (OpenID Connect Core 1.0 §2), not the access-token one. RFC 9068 §3 defines an access token'saudas the resource server, so providers that address the resource send something else entirely and could not authenticate.Microsoft ADFS is the case that made this necessary. It takes the identifier of the relying party trust and prefixes it with
microsoft:identityserver:unless that identifier is already a URL — so an admin whose relying party identifier is their client-id GUID seesaud: "microsoft:identityserver:<guid>"and has nothing to configure. ADFS is already listed as a supported IdP inconfiguration/user/oidc/oidc.adoc, so this gap was reachable from a documented setup.What
Adds an
audience::entry to the OIDC parameter reference inconfig_apps_sample_php_parameters.adoc(the page bothoidc.adocandkopano-setup.adocxref for the full key list), for the two versions the app change ships on:content/server/11.0/...— app 2.4.2content/server/10.16/...— app 2.3.5The entry covers the default (
client-id), the accepted shapes, that it replaces rather than extends the client-id, and how to find the ADFS value.It deliberately documents the operational consequences rather than just the syntax, because each one is a way to take an instance offline:
audmatches — the RFC 7662client_idcheck no longer applies. The entry says to pick a value only ownCloud can be issued for, and not to reuse a tenant-wide resource identifier.aud(which RFC 7662 permits), because every opaque token would then be rejected.exchange-token-mode-before-introspection, the first usable list entry is also what the token exchange requests from the IdP.Two deliberate choices:
Both ADFS cmdlets are named.
Get-AdfsWebApiApplicationfor an OpenID Connect application group,Get-AdfsRelyingPartyTrustfor a legacy WS-Federation or SAML trust. Naming only the latter — as the first draft did — would strand admins whose OIDC registration is an application group, which is the modern default on ADFS 2016+.No app version is claimed. Neither release carrying the fix is tagged yet (tags stop at
v2.4.1; the oC11 change sits under## [Unreleased]), so the entry points at the issue instead of asserting a number that could be off by a release.Placed alphabetically between
allowed-user-backendsandauth-params. The two files' entries are byte-identical.Checks
Full local CI equivalent —
npm ci,npm run antora,npm test— all pass, and the built pages carry the entry in both versions.Rendered output confirms the entry is a proper definition term in the right position:
Note this is the file's first use of
+list continuation (the entry needs three paragraphs). Verified in the rendered HTML that all three attach toaudienceand that every following term still parses as its own<dt>.Every factual claim was checked line-by-line against the implementation in owncloud/openidconnect#374 rather than against its README alone.
Docs-only; no nav or xref changes.
🤖 Generated with Claude Code