Problem
AuthProxy currently relies on network isolation for downstream identity provenance. Reverse-proxied requests and /.cratis/me use unsigned x-ms-client-principal* headers; invitation/link/sign-in back-channels use JSON and bearer material with no common authenticated request contract. Adding the same unsigned headers to a back-channel does not improve provenance when a caller capable of forging the body can forge the headers too.
Proposed capability
Provide one reusable opt-in, versioned authenticated request envelope for final YARP forwarding and every AuthProxy-owned back-channel. Bind:
- canonical provider key, issuer, and subject;
- downstream audience and tenant where applicable;
- short
iat/nbf/exp and unique request identifier;
- final method, path, ordered query, and exact body digest;
- invitation/link transaction or token context for their completion profiles.
Support active/previous keys, bounded replay protection, case-insensitive collision removal, and fail-closed verification. The producer must be reusable outside a YARP transform because AuthProxy directly calls /.cratis/me and other back-channels.
Acceptance criteria
Mutate signature, key id, audience, provider, issuer, subject, tenant, method, path/query ordering, body, expiry, duplicate/case-varied headers, and replay across replicas. Prove final proxied requests and every AuthProxy back-channel use the same producer contract. A consumer constructs a principal only after successful verification.
Legacy unsigned mode remains the default. A coordinated AuthProxy/consumer adapter release is required, but the additive mode does not inherently require a major version.
Problem
AuthProxy currently relies on network isolation for downstream identity provenance. Reverse-proxied requests and
/.cratis/meuse unsignedx-ms-client-principal*headers; invitation/link/sign-in back-channels use JSON and bearer material with no common authenticated request contract. Adding the same unsigned headers to a back-channel does not improve provenance when a caller capable of forging the body can forge the headers too.Proposed capability
Provide one reusable opt-in, versioned authenticated request envelope for final YARP forwarding and every AuthProxy-owned back-channel. Bind:
iat/nbf/expand unique request identifier;Support active/previous keys, bounded replay protection, case-insensitive collision removal, and fail-closed verification. The producer must be reusable outside a YARP transform because AuthProxy directly calls
/.cratis/meand other back-channels.Acceptance criteria
Mutate signature, key id, audience, provider, issuer, subject, tenant, method, path/query ordering, body, expiry, duplicate/case-varied headers, and replay across replicas. Prove final proxied requests and every AuthProxy back-channel use the same producer contract. A consumer constructs a principal only after successful verification.
Legacy unsigned mode remains the default. A coordinated AuthProxy/consumer adapter release is required, but the additive mode does not inherently require a major version.