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éthode | Route | Rôle |
|---|---|---|
| POST | /auth/register | Créer un compte |
| POST | /auth/login | Se connecter (renvoie access + refresh) |
| POST | /auth/confirm-email | Confirmer l'e-mail |
| POST | /auth/resend-confirmation | Renvoyer le mail de confirmation |
| POST | /auth/forgot-password | Demander une réinitialisation |
| POST | /auth/reset-password | Réinitialiser le mot de passe |
| POST | /auth/refresh | Échanger un refresh token contre un nouvel access token |
| POST | /auth/logout | Révoquer la session |
| GET | /auth/me | Profil 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.