Skip to content

ci: add an AS pairwise conformance leg - #650

Merged
osanderson merged 2 commits into
mainfrom
ci/conformance-pairwise
Oct 13, 2026
Merged

osanderson merged 2 commits into
mainfrom
ci/conformance-pairwise

Conversation

@osanderson

Copy link
Copy Markdown
Collaborator

Adds a 24th conformance configuration, AS pairwise: the AS baseline plan and variant (private_key_jwt, DPoP, plain FAPI, OpenID Connect) run against a conformance AS that gives every client pairwise subject identifiers (OpenID Connect Core §8).

Conformance AS

  • New -pairwise-subjects flag on cmd/conformance-as: Config.Subjects becomes pairwise for every client (pairwise.Reversible, prefix ppid:), derived by pairwise.NewReversible under keys generated at startup and kept in memory. Subs are stable for the life of the process, which is all one leg needs.
  • JWT access tokens keep working: serverresource maps the pairwise sub back to the end user at /userinfo, which returns the same pairwise sub as the ID token.
  • A smoke test drives the code flow with JWT and opaque access tokens and checks the ID token, UserInfo and refreshed ID token carry the same ppid:-prefixed sub.

The leg

  • New compose service conformance-as-pairwise (host port 18458), with its own committed pairwise.config.json; setup-config gains a pairwise profile (alias gofapi-pairwise) that writes pairwise-plan.json and patches the config, as for baseline.
  • run-all.sh brings the container up and runs the leg right after AS baseline. Expected warnings and skips start empty, as baseline's are.
  • A separate service rather than a second alias on the baseline AS: subject type is a server-wide default here, so pairwise subjects need their own AS process; it also keeps AS baseline exactly as it was.

Docs: the oidf-config README gains a pairwise section; the workflow, READMEs and ARCHITECTURE now count twenty-four configurations; AGENTS.md notes that a pairwise run appends -pairwise to the alias of the matrix cell it repeats (e.g. fapigo-sp-pkjwt-dpop-pairwise).

🤖 Generated with Claude Code

osanderson and others added 2 commits October 13, 2026 08:16
With -pairwise-subjects, cmd/conformance-as gives every client pairwise
subject identifiers, derived by pairwise.NewReversible under keys
generated at startup, with the prefix ppid:. JWT access tokens keep
working: serverresource maps a pairwise sub back to the end user at
/userinfo. A smoke test drives the code flow with JWT and opaque access
tokens and checks the ID token, UserInfo and refreshed ID token all
carry the same pairwise sub.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The 24th configuration runs the AS baseline plan and variant
(private_key_jwt, DPoP, OpenID Connect) against conformance-as-pairwise,
a conformance AS started with -pairwise-subjects. Every ID token,
UserInfo response and refreshed ID token the suite checks then carries
the client's pairwise sub, and JWT access tokens are mapped back to the
end user at the resource side.

setup-config gains a pairwise profile (alias gofapi-pairwise), which
writes pairwise-plan.json and patches the committed pairwise.config.json.
run-all.sh brings the container up and runs the leg after AS baseline,
with empty expected warnings and skips like baseline's. AGENTS.md notes
the -pairwise alias suffix, and the docs count twenty-four
configurations.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@codecov

codecov Bot commented Oct 13, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 60.00000% with 10 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
cmd/conformance-as/wiring.go 60.00% 5 Missing and 5 partials ⚠️

📢 Thoughts on this report? Let us know!

@sonarqubecloud

Copy link
Copy Markdown

@osanderson
osanderson merged commit 3db0a44 into main Oct 13, 2026
18 of 19 checks passed
@osanderson
osanderson deleted the ci/conformance-pairwise branch October 13, 2026 01:07
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