L'API Braver comprend deux APIs distinctes avec des modèles de sécurité différents:
- Frontend API (Ofys Frontend) - Authentification JWT en deux étapes
- Backend API (Ofys Backend) - Authentification JWT simple par clinique
L'API Frontend utilise une authentification JWT en deux étapes:
- Authentification Ofys → Obtenir un JWT Braver
- Authentification Braver → Accéder aux ressources protégées
Tous les tokens doivent utiliser l'algorithme de signature RS512.
- Type: HTTP Bearer JWT
- Émetteur: Ofys
- Utilisation: UNIQUEMENT pour
POST /auth/token - Flux: Ofys envoie son JWT → Braver valide et retourne un braverJwt
Format attendu
user_ofys_id: Identifiant utilisateur Ofysverified_emails: Liste des courriels vérifiés de l'utilisateur. Peut être une string (un seul courriel, ou séparés par des virgules) OU un array.exp: Timestamp d'expirationiat: Timestamp d'émissioniss: URL identifiant Ofysaud: URL d'installation Braver
- Type: HTTP Bearer JWT
- Émetteur: Braver
- Utilisation: Tous les endpoints protégés (sauf /professions et /typesLieux)
- Obtention: Via
POST /auth/tokenen présentant un ofysJwt - Durée de vie: À définir
Format attendu
Généré par Braver, pas de format requis.
| Endpoint | Méthode | Authentification | Description |
|---|---|---|---|
/auth/token |
POST | ofysJwt | Échange JWT Ofys → JWT Braver |
/professions |
GET | ❌ Publique | Liste des professions (données de référence) |
/typesLieux |
GET | ❌ Publique | Liste des types de lieux (données de référence) |
/rechercheDeProfessionnels |
GET | braverJwt | Recherche de professionnels |
/rechercheDeCliniques |
GET | braverJwt | Recherche de cliniques |
/fils-actifs/stats |
GET | braverJwt | Statistiques des fils actifs |
/fils-actifs |
GET | braverJwt | Liste des fils actifs (paginée) |
/fils/{id} |
GET | braverJwt | Détails complets d'un fil |
/fils/{id} |
PUT | braverJwt | Mettre à jour l'état du fil |
/fils/{id}/messages |
POST | braverJwt | Poster un message |
/fils |
POST | braverJwt | Créer un nouveau fil |
/fils/activites |
GET (WebSocket) | braverJwt | Connexion WebSocket temps réel |
Les endpoints suivants ne nécessitent AUCUNE authentification:
GET /professions- Retourne les professions disponiblesGET /typesLieux- Retourne les types de lieux disponibles
Ces endpoints retournent des données de référence statiques et peuvent être appelés sans JWT.
Tous les autres endpoints nécessitent un braverJwt valide dans l'en-tête:
Authorization: Bearer <braverJwt>
1. Ofys génère un JWT (ofysJwt) signé avec sa clé privée
2. Ofys appelle POST /auth/token avec Authorization: Bearer <ofysJwt>
3. Braver valide le JWT Ofys
4. Braver retourne un JWT Braver (braverJwt)
5. Ofys utilise braverJwt pour tous les appels suivants
6. Braver valide braverJwt pour chaque requête
- 401 Unauthorized: JWT invalide, expiré ou absent
- 403 Forbidden: JWT valide mais permissions insuffisantes (réservé pour évolutions futures)
- Stockage du JWT: Stocker braverJwt de manière sécurisée (pas en localStorage si possible)
- Renouvellement: Implémenter un mécanisme de renouvellement avant expiration
- HTTPS: Toujours utiliser HTTPS/WSS en production
- Validation: Valider les signatures JWT côté serveur
- Rotation des clés: Implémenter une rotation régulière des clés de signature
L'API Backend utilise deux schémas d'authentification JWT:
- providerJwt: Identifie le fournisseur Ofys (pour créer des clients)
- clinicJwt: Identifie une clinique/client spécifique (pour les opérations courantes)
Aucun endpoint public. Tous les endpoints nécessitent une authentification.
- Type: HTTP Bearer JWT
- Émetteur: Ofys (backend)
- Utilisation: UNIQUEMENT pour POST /clients
- Identifie: Le fournisseur Ofys (pas une clinique spécifique)
- Raison: Le client n'existe pas encore au moment de sa création
Format attendu
iss: Émetteur (Ofys)aud: URL d'installation Braversub: Identifiant du fournisseur Ofysiat: Timestamp d'émissionexp: Timestamp d'expiration
- Type: HTTP Bearer JWT
- Émetteur: Ofys (backend)
- Utilisation: Tous les autres endpoints (sauf POST /clients)
- Identifie: La clinique/client qui effectue la requête
Format attendu
iss: Émetteur (Ofys)aud: URL d'installation Bravertid: Identifiant clinique/client (tenant ID - identifiant Ofys de la clinique)iat: Timestamp d'émissionexp: Timestamp d'expiration
| Endpoint | Méthode | Authentification | Description |
|---|---|---|---|
/clients |
POST | providerJwt | Créer un nouveau client (identifie le fournisseur) |
/utilisateurs |
POST | clinicJwt | Créer un professionnel |
/utilisateurs/{id} |
PUT | clinicJwt | Mettre à jour un professionnel |
/utilisateurs/{id} |
DELETE | clinicJwt | Désactiver un professionnel |
/patients |
POST | clinicJwt | Créer un patient |
/patients/{id} |
PUT | clinicJwt | Mettre à jour un patient |
/patients/{id} |
DELETE | clinicJwt | Archiver un patient |
Tous les endpoints de l'API Backend nécessitent un JWT valide dans l'en-tête:
Authorization: Bearer <JWT>
- POST /clients: Utilise providerJwt (identifie le fournisseur Ofys)
- Tous les autres endpoints: Utilisent clinicJwt (identifient la clinique)
Il n'y a AUCUN endpoint public dans l'API Backend.
1. Ofys (backend) génère un JWT (providerJwt) signé avec sa clé privée
- Inclut l'identifiant du fournisseur (sub)
2. Ofys appelle POST /clients avec Authorization: Bearer <providerJwt>
3. Braver valide le JWT providerJwt
4. Braver crée le nouveau client
5. Braver retourne l'ID du client créé
1. Ofys (backend) génère un JWT (clinicJwt) signé avec sa clé privée
- Inclut l'identifiant clinique (tid)
2. Ofys appelle un endpoint Backend avec Authorization: Bearer <clinicJwt>
3. Braver valide le JWT clinicJwt
4. Braver extrait le tid pour identifier la clinique
5. Braver traite la requête dans le contexte de cette clinique
Le JWT clinicJwt contient l'identifiant clinique (tid) qui permet:
- Isolation des données: Chaque clinique ne peut accéder qu'à ses propres données
- Audit: Tracer les actions par clinique
- Multi-tenancy: Supporter plusieurs cliniques sur la même instance
Note: Le JWT providerJwt n'identifie pas une clinique spécifique, il identifie le fournisseur Ofys. Il est utilisé uniquement pour créer de nouveaux clients.
- 401 Unauthorized: JWT invalide, expiré ou absent
- 403 Forbidden: JWT valide mais clinique non autorisée (réservé pour évolutions futures)
- Validation du JWT: Valider la signature et l'expiration
- Extraction du tid: Extraire et valider l'identifiant clinique
- Isolation des données: Appliquer le tid à toutes les requêtes
- HTTPS: Toujours utiliser HTTPS en production
- Rotation des clés: Implémenter une rotation régulière des clés de signature
- Audit: Logger toutes les opérations avec le tid et l'utilisateur