Identity - Auth
Documentation detaillee des endpoints d'authentification du module Identity : login, register, logout, refresh token, mot de passe oublie, confirmation email, login social, 2FA, sessions.
Identity - Auth
Tous les endpoints d'authentification utilisent le prefixe /api/v1/identity/auth.
Login
POST /api/v1/identity/auth/login
Authentifie un utilisateur avec email et mot de passe.
Tag : Authentication
Auth requise : Non
Rate limiting : Auth policy (10 req/min)
Request body
{
"email": "user@example.com",
"password": "MyP@ssword123",
"deviceId": "device-abc-123"
}
| Champ | Type | Requis | Description |
|---|---|---|---|
email | string | Oui | Adresse email de l'utilisateur |
password | string | Oui | Mot de passe |
deviceId | string | Non | Identifiant stable du device (max 256 chars) |
Reponses
200 OK -- Authentification reussie :
{
"accessToken": "eyJhbGciOi...",
"refreshToken": "dGhpcyBpcyB...",
"expiresIn": 3600,
"tokenType": "Bearer",
"user": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"email": "user@example.com",
"firstName": "John",
"lastName": "Doe",
"fullName": "John Doe",
"phoneNumber": null,
"imageUrl": null,
"roles": ["user"]
}
}
200 OK -- 2FA requis (si active) :
{
"requiresTwoFactor": true,
"challengeToken": "abc123..."
}
401 Unauthorized -- Email ou mot de passe invalide.
423 Locked -- Compte temporairement verrouille apres echecs repetes. Inclut lockoutEnd.
Register
POST /api/v1/identity/auth/register
Cree un nouveau compte utilisateur et emet automatiquement des tokens d'authentification.
Tag : Authentication
Auth requise : Non
Rate limiting : Registration policy (5 req/min)
Request body
{
"email": "newuser@example.com",
"password": "MyP@ssword123",
"confirmPassword": "MyP@ssword123",
"deviceId": "device-abc-123"
}
| Champ | Type | Requis | Description |
|---|---|---|---|
email | string | Oui | Adresse email |
password | string | Oui | Mot de passe (min 8 caracteres) |
confirmPassword | string | Oui | Confirmation du mot de passe |
deviceId | string | Non | Identifiant du device |
Headers optionnels
Idempotency-Key: Cle d'idempotence pour eviter les doublons en cas de retry.
Reponses
201 Created -- Compte cree. Retourne AuthTokensResponse. Header Location pointe vers la ressource utilisateur.
400 Bad Request -- Erreur de validation ou politique de mot de passe non respectee.
409 Conflict -- Un compte avec cet email existe deja (message generique pour eviter l'enumeration).
Refresh Token
POST /api/v1/identity/auth/refresh
Echange un refresh token contre une nouvelle paire access/refresh token.
Tag : Authentication
Auth requise : Non
Rate limiting : Auth policy
Request body
{
"refreshToken": "dGhpcyBpcyB...",
"deviceId": "device-abc-123"
}
Reponses
200 OK -- Retourne AuthTokensResponse avec les nouveaux tokens.
401 Unauthorized -- Token invalide, expire, revoque ou replay detecte.
Securite
- Token rotation : Chaque appel emet un nouveau refresh token. L'ancien est invalide immediatement.
- Detection de replay : Si un token deja utilise est soumis, toutes les sessions de l'utilisateur sont revoquees.
- Session binding : Si le binding IP est active et que l'IP differe, la session est revoquee.
Logout
POST /api/v1/identity/auth/logout
Revoque la session courante et invalide le refresh token.
Tag : Authentication
Auth requise : Oui (Authorization: Bearer <accessToken>)
Request body
{
"refreshToken": "dGhpcyBpcyB..."
}
Reponses
204 No Content -- Session revoquee.
Le access token reste valide jusqu'a son expiration naturelle (15-60 minutes). Le client doit le supprimer immediatement.
Confirm Email
POST /api/v1/identity/auth/confirm-email
Confirme l'adresse email de l'utilisateur via un code OTP.
Tag : Authentication
Auth requise : Non
Rate limiting : Auth policy
Request body
{
"email": "user@example.com",
"code": "123456"
}
Reponses
200 OK -- Email confirme (ou deja confirme). Retourne toujours 200 pour eviter l'enumeration.
401 Unauthorized -- Code OTP invalide ou expire.
400 Bad Request -- Erreur de validation.
Resend Confirmation
POST /api/v1/identity/auth/resend-confirmation
Renvoie le code de confirmation email.
Tag : Authentication
Auth requise : Non
Rate limiting : Auth policy
Request body
{
"email": "user@example.com"
}
Reponses
200 OK -- Toujours retourne 200 (anti-enumeration).
{
"method": "email",
"maskedContact": "u***@example.com",
"expiresIn": 300
}
Social Login
POST /api/v1/identity/auth/social
Authentifie ou enregistre un utilisateur via un provider OAuth social.
Tag : Authentication
Auth requise : Non
Rate limiting : Auth policy
Request body
{
"provider": "google",
"token": "eyJhbGciOi...",
"deviceId": "device-abc-123"
}
| Champ | Type | Requis | Description |
|---|---|---|---|
provider | string | Oui | Provider : google, apple, facebook |
token | string | Oui | ID token du provider (pas un access token) |
deviceId | string | Non | Identifiant du device |
Headers optionnels
Idempotency-Key: Cle d'idempotence.
Reponses
200 OK -- Utilisateur existant connecte. Retourne SocialLoginResponse.
201 Created -- Nouveau compte cree via login social. Retourne SocialLoginResponse.
{
"tokens": {
"accessToken": "...",
"refreshToken": "...",
"expiresIn": 3600,
"tokenType": "Bearer",
"user": { ... }
},
"isNewAccount": true
}
401 Unauthorized -- Token social invalide ou expire.
403 Forbidden -- Email existant avec une autre methode d'auth, ou compte inactif.
Change Password
POST /api/v1/identity/auth/change-password
Change le mot de passe de l'utilisateur authentifie.
Tag : Account
Auth requise : Oui
Request body
{
"currentPassword": "OldP@ssword123",
"newPassword": "NewP@ssword456"
}
Reponses
204 No Content -- Mot de passe change.
401 Unauthorized -- Mot de passe actuel incorrect.
422 Unprocessable Entity -- Nouveau mot de passe non conforme ou dans l'historique recent.
Effets de bord
Toutes les sessions actives sauf la courante sont immediatement revoquees.
Forgot Password
POST /api/v1/identity/auth/forgot-password
Demande un code OTP par email pour reinitialiser le mot de passe.
Tag : Password Recovery
Auth requise : Non
Request body
{
"email": "user@example.com"
}
Reponses
200 OK -- Toujours (anti-enumeration).
{
"method": "email",
"maskedContact": "u***@example.com",
"expiresIn": 300
}
Verify OTP
POST /api/v1/identity/auth/otp/verify
Valide le code OTP et retourne un token de reinitialisation.
Tag : Password Recovery
Auth requise : Non
Request body
{
"email": "user@example.com",
"code": "123456"
}
Reponses
200 OK :
{
"resetToken": "abc123...",
"expiresIn": 600
}
Le resetToken est valide 10 minutes.
401 Unauthorized -- Code invalide ou expire.
Resend OTP
POST /api/v1/identity/auth/otp/resend
Genere un nouveau code OTP et invalide le precedent.
Tag : Password Recovery
Auth requise : Non
Request body
{
"email": "user@example.com"
}
Reponses
200 OK -- Toujours (anti-enumeration).
{
"method": "email",
"maskedContact": "u***@example.com",
"expiresIn": 300
}
Reset Password
POST /api/v1/identity/auth/reset-password
Reinitialise le mot de passe avec le token obtenu via Verify OTP.
Tag : Password Recovery
Auth requise : Non
Request body
{
"resetToken": "abc123...",
"newPassword": "NewP@ssword456",
"deviceId": "device-abc-123"
}
Headers optionnels
Idempotency-Key: Cle d'idempotence.
Reponses
200 OK -- Mot de passe reinitialise. Retourne AuthTokensResponse (connexion automatique).
401 Unauthorized -- Token invalide, deja utilise ou expire.
422 Unprocessable Entity -- Mot de passe non conforme ou dans l'historique.
Effets de bord
Toutes les sessions existantes sont immediatement revoquees.
Login 2FA
POST /api/v1/identity/auth/login/2fa
Complete l'authentification avec un code 2FA (TOTP ou recovery code).
Tag : Two-Factor Authentication
Auth requise : Non
Request body
{
"challengeToken": "abc123...",
"code": "123456",
"deviceId": "device-abc-123"
}
Reponses
200 OK -- Retourne AuthTokensResponse.
401 Unauthorized -- Code 2FA invalide, challenge expire (5 min), ou compte inactif.
TOTP Setup
POST /api/v1/identity/auth/2fa/totp/setup
Initie la configuration TOTP pour l'utilisateur authentifie.
Tag : Two-Factor Authentication
Auth requise : Oui
Reponses
200 OK :
{
"sharedKey": "JBSWY3DPEHPK3PXP",
"authenticatorUri": "otpauth://totp/Place%20API:user@example.com?secret=..."
}
409 Conflict -- 2FA deja active.
TOTP Verify
POST /api/v1/identity/auth/2fa/totp/verify
Complete la configuration TOTP en verifiant un code de l'application authenticator.
Tag : Two-Factor Authentication
Auth requise : Oui
Request body
{
"code": "123456"
}
Reponses
200 OK :
{
"recoveryCodes": [
"ABCD-1234-EFGH",
"IJKL-5678-MNOP",
...
]
}
Les recovery codes ne sont affiches qu'une seule fois.
400 Bad Request -- Code de verification invalide.
409 Conflict -- 2FA deja active.
TOTP Disable
POST /api/v1/identity/auth/2fa/totp/disable
Desactive la 2FA. Requiert la confirmation du mot de passe.
Tag : Two-Factor Authentication
Auth requise : Oui
Request body
{
"password": "MyP@ssword123"
}
Reponses
204 No Content -- 2FA desactivee.
401 Unauthorized -- Mot de passe incorrect.
409 Conflict -- 2FA pas active.
Effets de bord
Toutes les sessions sont revoquees apres desactivation.
Regenerate Recovery Codes
POST /api/v1/identity/auth/2fa/recovery-codes/regenerate
Genere un nouveau jeu de codes de recuperation, invalidant les precedents.
Tag : Two-Factor Authentication
Auth requise : Oui
Request body
{
"password": "MyP@ssword123"
}
Reponses
200 OK -- Retourne RecoveryCodesResponse.
409 Conflict -- 2FA pas active.
Sessions
Get My Sessions
GET /api/v1/identity/auth/sessions
Retourne toutes les sessions actives de l'utilisateur authentifie.
Tag : Sessions
Auth requise : Oui
Reponses
200 OK :
[
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"deviceType": "Desktop",
"browser": "Chrome",
"operatingSystem": "macOS",
"ipAddress": "192.168.*.1",
"createdAt": "2026-01-15T10:30:00Z",
"lastActivityAt": "2026-01-15T14:00:00Z",
"isCurrent": true
}
]
Les adresses IP sont partiellement masquees pour la confidentialite.
Revoke Session
DELETE /api/v1/identity/auth/sessions/{sessionId}
Revoque une session specifique de l'utilisateur.
Tag : Sessions
Auth requise : Oui
Reponse : 204 No Content
Revoke All Other Sessions
DELETE /api/v1/identity/auth/sessions
Revoque toutes les sessions sauf la courante.
Tag : Sessions
Auth requise : Oui
Reponse : 204 No Content
Push Tokens
Register Push Token
POST /api/v1/identity/users/me/push-tokens
Enregistre ou met a jour un token de notification push.
Tag : Push Tokens
Auth requise : Oui
Request body
{
"token": "fcm-token-abc123...",
"platform": "android",
"deviceId": "device-abc-123"
}
Reponse : 204 No Content
Unregister Push Token
DELETE /api/v1/identity/users/me/push-tokens
Supprime un token push.
Tag : Push Tokens
Auth requise : Oui
Request body
{
"token": "fcm-token-abc123..."
}
Reponse : 204 No Content (meme si le token n'existait pas).
Linked Accounts
Get Linked Accounts
GET /api/v1/identity/users/me/linked-accounts
Retourne le statut de liaison pour tous les providers sociaux.
Tag : Linked Accounts
Auth requise : Oui
Reponse
200 OK :
[
{
"provider": "google",
"linked": true,
"email": "user@gmail.com",
"linkedAt": "2026-01-10T08:00:00Z"
},
{
"provider": "apple",
"linked": false,
"email": null,
"linkedAt": null
},
{
"provider": "facebook",
"linked": false,
"email": null,
"linkedAt": null
}
]
Link Account
POST /api/v1/identity/users/me/linked-accounts
Lie un provider social au compte de l'utilisateur.
Tag : Linked Accounts
Auth requise : Oui
Request body
{
"provider": "google",
"token": "eyJhbGciOi..."
}
201 Created -- Provider lie.
409 Conflict -- Provider deja lie, ou compte social deja lie a un autre utilisateur.
Unlink Account
DELETE /api/v1/identity/users/me/linked-accounts/{provider}
Supprime la liaison avec un provider social.
Tag : Linked Accounts
Auth requise : Oui
204 No Content -- Provider delie.
404 Not Found -- Provider non lie.
409 Conflict -- Impossible de supprimer la derniere methode d'authentification.
Security Settings
Get Security Settings
GET /api/v1/identity/users/me/security
Retourne les parametres de securite de l'utilisateur.
Tag : Security Settings
Auth requise : Oui
Reponse
{
"twoFactorEnabled": false,
"loginNotificationsEnabled": true,
"sessionAlertEnabled": false
}
Update Security Settings
PATCH /api/v1/identity/users/me/security
Met a jour les parametres de securite (semantique PATCH : seuls les champs fournis sont modifies).
Tag : Security Settings
Auth requise : Oui
Request body
{
"loginNotificationsEnabled": true,
"sessionAlertEnabled": true
}
Reponse : 204 No Content
JWKS
Get JSON Web Key Set
GET /.well-known/jwks.json
Retourne les cles publiques utilisees pour verifier les JWT emis par le serveur (format RFC 7517).
Tag : Authentication
Auth requise : Non
Cache : Reponse cacheable (1 heure).