Développeurs

Concepts transverses

Authentification (JWT Identity Hub)

Toutes les API applicatives de Puwapi acceptent le même JWT, émis par l'Identity Hub et signé par un secret partagé (HMAC). Le jeton identifie l'utilisateur et son organisation active (tenant).

Base URL Identity Hub — dev : http://localhost:5029 · prod : voir Environnements.

Obtenir un jeton

curl -X POST https://<identity>/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"user@exemple.com","password":"••••••••"}'

Réponse (schéma) :

{
  "accessToken": "eyJhbGciOi...",
  "refreshToken": "...",
  "expiresIn": 3600
}

Endpoints d'authentification principaux (/auth) :

MéthodeRouteRôle
POST/auth/registerCréer un compte
POST/auth/loginSe connecter (renvoie access + refresh)
POST/auth/confirm-emailConfirmer l'e-mail
POST/auth/resend-confirmationRenvoyer le mail de confirmation
POST/auth/forgot-passwordDemander une réinitialisation
POST/auth/reset-passwordRéinitialiser le mot de passe
POST/auth/refreshÉchanger un refresh token contre un nouvel access token
POST/auth/logoutRévoquer la session
GET/auth/meProfil de l'utilisateur connecté

Utiliser le jeton

Ajoutez-le à chaque appel :

Authorization: Bearer <accessToken>

Le jeton porte : l'userId, le tenantId (organisation active), l'expiration. Les services en déduisent l'isolation des données — vous n'avez jamais à passer d'tenantId en paramètre.

Rafraîchir automatiquement

L'access token est de courte durée. À la réception d'un 401, échangez le refresh token via /auth/refresh, puis rejouez la requête. (Le front du Hub fait exactement cela : à 401, il rafraîchit une fois puis réessaie.)

Organisations et bascule

  • GET /orgs — liste des organisations de l'utilisateur.
  • POST /orgs/{id}/switch — basculer d'organisation (nouveau contexte tenant).
  • POST /orgs, invitations, membres… voir Référence API — Identity Hub.

Révocation

La déconnexion et certaines actions d'administration révoquent le jeton. Chaque service vérifie la révocation via un Redis partagé : un jeton révoqué est refusé même s'il n'a pas encore expiré.

Bonnes pratiques

  • Ne stockez jamais le JWT en clair côté client durable. Le front du Hub le garde en mémoire et le transmet aux fonctions temps réel comme argument (jamais en cookie).
  • Pour une intégration sans utilisateur, n'utilisez pas de JWT : générez une clé API de module. Voir Clés API serveur.

#api #auth