Repository navigation
Slice 062: MCP authorization (client role, resource server, personal-profile AS) - #60
Merged
Merged
Conversation
… the issuer question Signed-off-by: Ayla Croft <aylacroft@proton.me>
…ersonal), the host, the plug's 401 with a challenge, the principal in the context and the receipts, scope before the gate, the OAuth endpoints and the client role's callback Signed-off-by: Ayla Croft <aylacroft@proton.me>
Signed-off-by: Ayla Croft <aylacroft@proton.me>
…pts name the principal; no token material Signed-off-by: Ayla Croft <aylacroft@proton.me>
…+ PKCE + resource, iss on the redirect, the RS accepts its own issuer); DCR 404 unless enabled; rotation strictly newer; a loopback CIMD document over http; the JWKS miss floor wired Signed-off-by: Ayla Croft <aylacroft@proton.me>
…, the one reader of the header), AC8 (the client role against the fake AS: 401 to challenge, PKCE, the token stored 0600 and presented, the RS accepts it; wrong iss refused; DCR once), introspection (RFC 7662), the configuration's refusals, the personal profile refused at boot under an external adapter, no key material in production; the fake AS's token endpoint kept its state; the client clears its challenge on connect Signed-off-by: Ayla Croft <aylacroft@proton.me>
…ze', which begins the client role's flow and sends the owner to the authorization server Signed-off-by: Ayla Croft <aylacroft@proton.me>
…he owner's decision (AC3, AC6 removed; the profile table); the recovery, the deviations and the findings in NOTES; docs 01, 06, 07, 08, 09, mcp-server and the README as built; TRINITY_MCP_AUTH_* in runtime.exs; the ROADMAP row and its change-log line Signed-off-by: Ayla Croft <aylacroft@proton.me>
…the MCP supervisor, not linked to its booter (the suite found it dying with the test process); the gate's readability and complexity findings (the claim checks in three named steps, the key lookup flattened, the fake AS's route table, alias order); sobelow's traversal findings on the host's own paths, each with its reason Signed-off-by: Ayla Croft <aylacroft@proton.me>
…package is a top-level boundary, since a sub-boundary inherits its ancestors' deps and the empty list under Trinity.MCP was a claim the compiler never checked; Trinity.MCP names it as a dependency, the planted line is a fixture and the refusal is PROOF's Signed-off-by: Ayla Croft <aylacroft@proton.me>
…1, AC2, AC4, AC5, AC7 and AC8 (AC3 and AC6 removed); the boundary refusal and the census red, each pasted from its run; the consent page and the live endpoints under proof/ Signed-off-by: Ayla Croft <aylacroft@proton.me>
…rce server, personal-profile AS) Signed-off-by: Ayla Croft <aylacroft@proton.me>
Signed-off-by: Ayla Croft <aylacroft@proton.me>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Slice 062: MCP authorization, in every role, above beam_mcp's core (ADR-0007 decision 8; ADR-0008
decision 4: identity is not authority).
Three profiles.
:localis 061's static bearer on the loopback, unchanged and still thedefault.
:productionmakes Trinity an OAuth 2.1 resource server against the externalauthorization server a deployment names: RFC 9728 metadata,
401with a challenge, JWT validationagainst the issuer's JWKS (
iss,audholding this server,exp,nbf, an allow list thatexcludes
noneand every shared-secret algorithm) or RFC 7662 introspection for opaque tokens.Trinity issues nothing there and holds no signing key.
:personaladds a small authorizationserver for the owner's own machine: RFC 8414 metadata, code + PKCE (S256), RFC 8707
resource,RFC 9207
iss, CIMD with DCR behind a flag, ES256 tokens of ten minutes, rotation bykid.The owner's three constraints, as properties the tests hold. No tool dispatch without an
audience-bound token and a host gate (scope is checked before the gate and is never an allow rule).
No token material in the model context (the boundary answers a principal, never the token; a census
holds that one function reads the
Authorizationheader). Receipts name issuer, subject and scope,on refusals and on calls that run.
Trinity is not the issuer of production authority. The personal profile refuses to start under
an external authority adapter, and every token it mints carries a mark the production profile
refuses whatever key signed it. Enterprise Managed Authorization left the slice under the owner's
decision of 2026-09-22 and is recorded as a deferral with a lift condition (NOTES, "Amendment");
AC3 and AC6 are removed from the acceptance criteria.
Client role. On a
401naming resource metadata the/mcppage offers "authorize"; the flowruns with PKCE and a resource indicator, the callback checks
iss, and the token is stored perresource at mode 0600. 060's driver presents it and performs no flow of its own, by census.
Proof:
slices/062-mcp-server-auth/PROOF.md(AC1, AC2, AC4, AC5, AC7, AC8, each with its commandand output; the boundary refusal and the census red are pasted from their runs). Gate green locally
and on CI across the SQLite, Postgres and FIPS legs.