Conformance command options
/.well-known metadata paths for authorization servers and protected resources. Set THEAUTH_CONFORMANCE_TOKEN and THEAUTH_CONFORMANCE_REFRESH_TOKEN to keep tokens out of shell history.
Checks
Severity follows RFC 2119. A failed MUST turns the badge red. A failed SHOULD or MAY turns it yellow.
Skips are never faked into passes, and each one says why.
Skipped checks
- Not advertised: DCR, token exchange, introspection, DPoP.
refresh-rotation: needs--refresh-tokenand--client-id. The test consumes the token.resource-indicator-audience: needs--token(a JWT).token-exchange-act-chain: needs a valid subject token and client credentials.- Introspection behind client authentication (401 or 403).
- Negative authorize probes: the server never accepts a valid request, or shows a login page for the bad one. Skipped if the control request is rejected.
Badge
--badge out.json writes a shields.io endpoint:
npx @glinr/theauth-conformance https://auth.example.com --badge badge.json.
Only checks that ran count toward the message. Green: nothing failed. Yellow: only SHOULD or MAY failed. Red: a MUST failed. Grey (not tested): nothing could run.
Use in code
Tested against theAuth
The package test runs the suite against the real MCP OAuth module from@glinr/theauth on a Node http server. Pinned result: 13 pass, 0 fail, 5 skipped (refresh rotation, audience, token exchange twice, introspection). A lax stub server must fail the checks.
Limits
- A green badge means the server behaved correctly on these probes. It is not an audit.
- Skips never count as passes.