Skip to content

feat(oauth): advertise dpop_signing_alg_values_supported in discovery (#118)#149

Merged
windischb merged 1 commit into
developfrom
feat/dpop-discovery
Jul 19, 2026
Merged

feat(oauth): advertise dpop_signing_alg_values_supported in discovery (#118)#149
windischb merged 1 commit into
developfrom
feat/dpop-discovery

Conversation

@windischb

Copy link
Copy Markdown
Contributor

Part of #118. Fourth DPoP (RFC 9449 §5.1) slice.

The AS metadata document (/.well-known/openid-configuration) now lists the
DPoP proof signing algorithms it accepts, so clients and resource servers
can discover DPoP support — e.g. an MCP agent probing discovery before
deciding to sender-constrain its tokens.

Changes

  • DpopDiscoveryMetadataHandler (HandleConfigurationRequestContext)
    emits dpop_signing_alg_values_supported via the free-form metadata dict,
    the same mechanism the CIMD/DCR discovery handlers use. Unconditional
    DPoP is offered to every realm (opt-in per request), so no per-realm gate.
  • The advertised list is sourced from
    DpopProofValidator.SupportedSigningAlgorithms, now exposed publicly (in
    both the server copy and the duplicated client copy, kept identical), so
    what's advertised can't drift from what the token endpoint enforces.

Tests

Integration test asserts discovery carries the array incl. ES256/RS256/
PS256. Full DPoP suite green (50 unit + 6 integration).

Remaining DPoP follow-ups

  • per-client RequireDpop enforcement (mirror RequirePushedAuthorizationRequests);
  • DPoP-Nonce (DPoP-Nonce / use_dpop_nonce), AS + RS;
  • refresh-token binding for public clients;
  • JWT-bearer-path RS validation (AddModgudClient);
  • (optional) opt-in RS-side jti replay cache.

🤖 Generated with Claude Code

…#118)

Fourth DPoP slice (RFC 9449 §5.1): the AS metadata document now lists the
proof signing algorithms it accepts, so clients and resource servers can
discover DPoP support (e.g. an MCP agent probing /.well-known before
choosing to sender-constrain its tokens).

- DpopDiscoveryMetadataHandler (HandleConfigurationRequestContext) emits
  dpop_signing_alg_values_supported via the free-form metadata dict, the
  same mechanism as the CIMD/DCR handlers. Unconditional — DPoP is offered
  to every realm (opt-in per request), so no per-realm gate.
- The list is sourced from DpopProofValidator.SupportedSigningAlgorithms —
  now exposed publicly (in both the server and the duplicated client copy,
  kept identical) — so the advertised set can't drift from what the token
  endpoint actually enforces.

Integration test asserts discovery carries the array including ES256/RS256/
PS256. Full DPoP suite green (50 unit + 6 integration).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@windischb
windischb merged commit a24fbad into develop Jul 19, 2026
8 checks passed
@windischb
windischb deleted the feat/dpop-discovery branch July 19, 2026 04:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant