Skip to content

feat(security): clés d'API (ADR-0070, #665) - #1247

Merged
rolljee merged 2 commits into
docs/adr-0070-cles-d-apifrom
feat/api-keys
Oct 2, 2026
Merged

rolljee merged 2 commits into
docs/adr-0070-cles-d-apifrom
feat/api-keys

Conversation

@rolljee

@rolljee rolljee commented Oct 2, 2026

Copy link
Copy Markdown
Member

Implémente la v1 retenue dans l'ADR-0070 (#1246, sur laquelle cette PR est empilée).

⏸ À ne pas fusionner avant la fin de la QA de console-v5 : une fusion sur 5-dev redéploierait ce que l'équipe est en train de tester.

Ce que ça ajoute

  • /security/users/:id/api-keys : les clés d'un utilisateur (security:*). On y arrive par l'icône clé de sa ligne ou par le bouton « API keys » de sa page.
  • « My API keys » dans le menu de session, sur /api-keys (auth:*). Les deux écrans partagent le même composant, ApiKeyList.
  • Création :
    • la description est obligatoire ;
    • l'expiration se choisit parmi 7 j, 30 j, 90 j (par défaut), 1 an et « sans expiration », ce dernier choix avec un avertissement.
  • Jeton montré une fois, avec un bouton de copie. La fenêtre ne se ferme ni par Échap, ni d'un clic à côté, ni par la croix : seulement par « I've copied it ». Le jeton n'est conservé nulle part (store, storage, toast, logs).
  • Liste :
    • description, échéance relative (date exacte au survol), empreinte abrégée ;
    • les clés expirées et celles sans expiration sont marquées ;
    • filtre par description ;
    • l'empreinte est masquée sous md.
  • Révocation unitaire, après une confirmation qui nomme la clé.
  • Droits : six getters dans auth.ts. Rien n'est proposé sans droit, à une session anonyme, ni sur un backend v1.

Garde-fou

  • Nouvelle spec apiKeys.spec.js (7 tests), ajoutée à la matrice de checks.yml. CLAUDE.md passe à 18 specs.
  • Elle vérifie que le jeton :
    • authentifie bien en tant que l'utilisateur ;
    • ne figure ni dans la page après fermeture, ni dans le localStorage ou le sessionStorage ;
    • n'authentifie plus après révocation (401).
  • En local, sur un build et une stack neuve : apiKeys 7/7, users 20/20, login 22/22.
  • test:lint, test:types et les trois check:* passent.

Refs #665

🤖 Generated with Claude Code

rolljee and others added 2 commits October 2, 2026 20:59
Une section par utilisateur (security:*), atteinte depuis sa ligne et sa
page, et « My API keys » dans le menu de session (auth:*), sur un seul
composant. Le jeton n'est montré qu'une fois, dans une fenêtre qui ne se
ferme que par son bouton, et n'est conservé nulle part. Expiration à
90 jours par défaut, avertissement sans expiration, clés expirées
marquées, révocation confirmée. Rien n'est proposé sans droit, à une
session anonyme ni sur un backend v1. 18e spec, apiKeys.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@rolljee
rolljee added this pull request to stack #1248 October 2, 2026 19:54
@rolljee
rolljee marked this pull request as ready for review October 2, 2026 19:54
@rolljee
rolljee merged commit 6ae9c1e into 5-dev Oct 2, 2026
25 checks passed
@rolljee
rolljee deleted the feat/api-keys branch October 2, 2026 20:13
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