Skip to content

feat(auth): add JWT OIDC validation - #84

Open
P4ST4S wants to merge 1 commit into
feat/principal-auth-abstractionfrom
feat/jwt-oidc-auth
Open

feat(auth): add JWT OIDC validation#84
P4ST4S wants to merge 1 commit into
feat/principal-auth-abstractionfrom
feat/jwt-oidc-auth

Conversation

@P4ST4S

@P4ST4S P4ST4S commented Aug 23, 2026

Copy link
Copy Markdown
Owner

Summary

Ajoute le mode OIDC resource server : validation JWT cryptographique par JWKS rotatif, contrôle strict des claims enregistrés et projection minimale vers Principal.

Context

Cette PR est empilée sur #83. Le proxy valide des access tokens émis par un IdP ; il n’implémente ni émission de token, ni authorization code flow, ni enregistrement dynamique.

Approach

  • valide obligatoirement signature, issuer, audience, exp et nbf ;
  • exige subject et un claim client_id configurable ;
  • limite les algorithmes à une allowlist asymétrique explicite et refuse les variantes HMAC ;
  • précharge et valide un JWKS borné à 1 MiB avant d’accepter du trafic ;
  • rafraîchit les clés en arrière-plan et à la rencontre d’un kid inconnu ;
  • exige HTTPS pour issuer et JWKS hors loopback ;
  • projette uniquement subject, client_id, issuer, roles et scopes ; les autres claims sont supprimés.

Dependencies

Ajoute github.com/golang-jwt/jwt/v5 v5.3.1 pour le parsing et la validation JWT, et github.com/MicahParks/keyfunc/v3 v3.6.2 pour le stockage et la rotation JWKS. Réimplémenter correctement la vérification multi-algorithmes, la sélection kid et le rafraîchissement concurrent avec la bibliothèque standard augmenterait fortement le risque cryptographique. Ces versions conservent le support Go 1.22 du projet.

Test plan

  • go test -race ./... — passe
  • go build ./... — passe
  • go vet ./... — passe
  • token valide et projection roles/scopes dédupliquée — passent
  • issuer, audience, exp, nbf, subject et client_id invalides ou absents — rejetés
  • signature incorrecte et HS256 — rejetés
  • rotation vers un nouveau kid — validée après refresh JWKS
  • JWKS invalide au démarrage — échec fail-closed
  • validation des URL, algorithmes et timeouts OIDC — couverte

Stability impact

Ajoute le mode auth.mode=oidc et les clés auth.oidc.*. Les modes none et static_bearer existants sont inchangés.

Notes for reviewer

La configuration utilise un jwks_uri explicite. La découverte OIDC automatique est volontairement hors périmètre pour garder la source de clés déterministe.

@codecov-commenter

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

❌ Patch coverage is 72.01835% with 61 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
internal/auth/jwt.go 73.72% 22 Missing and 14 partials ⚠️
cmd/mcp-audit/main.go 63.76% 21 Missing and 4 partials ⚠️

📢 Thoughts on this report? Let us know!

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.

2 participants