Authentification
L'API MyTelevision utilise l'authentification par token JWT Bearer. Deux systemes d'authentification coexistent selon le mode d'utilisation.
Methodes d'authentification
| Methode | Description | Endpoint de base |
|---|---|---|
| Auth classique | Email/password avec JWT | /api/v2/auth/* |
| Account Auth | Systeme multi-profil (Netflix-style) | /api/v2/account-auth/* |
| Social Auth | Google, Apple, Facebook via Firebase | /api/v2/auth/social/* |
| 2FA (TOTP) | Authentification a deux facteurs | /api/v2/account/2fa/* |
Bearer Token (JWT)
Toutes les requetes authentifiees doivent inclure le header Authorization :
Authorization: Bearer <access_token>
Obtenir un token (Auth classique)
POST /api/v2/auth/login
Content-Type: application/json
{
"email": "[email protected]",
"password": "SecurePassword123!"
}
Reponse :
{
"accessToken": "eyJhbGciOiJSUzI1NiIs...",
"refreshToken": "dGhpcyBpcyBhIHJlZnJlc2...",
"expiresIn": 900,
"tokenType": "Bearer",
"user": {
"id": "uuid",
"email": "[email protected]",
"role": "USER"
}
}
Obtenir un token (Account Auth -- multi-profil)
Le systeme multi-profil fonctionne en deux etapes :
Etape 1 -- Valider les credentials
POST /api/v2/account-auth/login
Content-Type: application/json
{
"email": "[email protected]",
"password": "SecureP@ss123"
}
Reponse :
{
"accountId": "uuid",
"profiles": [
{ "id": "uuid", "name": "John", "avatar": "url", "type": "STANDARD" },
{ "id": "uuid", "name": "Kids", "avatar": "url", "type": "KIDS" }
],
"tempToken": "eyJhbG..."
}
Etape 2 -- Selectionner un profil
POST /api/v2/account-auth/select-profile
Content-Type: application/json
Authorization: Bearer <tempToken>
{
"profileId": "uuid",
"pin": "1234"
}
Le champ pin n'est requis que si le profil a un PIN configure.
Rafraichir un token
POST /api/v2/auth/refresh
Content-Type: application/json
{
"refreshToken": "dGhpcyBpcyBhIHJlZnJlc2..."
}
Reponse :
{
"accessToken": "eyJhbGciOiJSUzI1NiIs...",
"expiresIn": 900
}
Deconnexion
POST /api/v2/auth/logout
Authorization: Bearer <access_token>
Reponse : 204 No Content
Authentification sociale
L'API utilise Firebase comme identity provider pour les connexions sociales.
| Provider | Endpoint |
|---|---|
POST /api/v2/auth/social/google | |
| Apple | POST /api/v2/auth/social/apple |
POST /api/v2/auth/social/facebook | |
| Firebase (auto-detection) | POST /api/v2/auth/firebase |
Exemple de requete sociale
POST /api/v2/auth/social/google
Content-Type: application/json
{
"idToken": "firebase-id-token-from-client-sdk"
}
Gestion des comptes lies
| Methode | Endpoint | Description |
|---|---|---|
| POST | /api/v2/auth/social/link | Lier un nouveau provider au compte |
| DELETE | /api/v2/auth/social/unlink/:provider | Delier un provider |
| GET | /api/v2/auth/social/accounts | Lister les comptes lies |
Strategie de liaison de compte (ordre de priorite)
- Recherche par
provider + providerUserId(compte social existant) - Recherche par
firebaseUid(utilisateurs Firebase legacy) - Recherche par
email(liaison au compte email existant) - Creation d'un nouvel utilisateur (premiere inscription)
Authentification a deux facteurs (2FA / TOTP)
Authentification basee sur TOTP (Time-based One-Time Password), compatible avec Google Authenticator, Authy, etc.
Endpoints 2FA
| Methode | Endpoint | Description | Auth |
|---|---|---|---|
| POST | /account/2fa/setup | Initialiser la configuration 2FA | Oui |
| POST | /account/2fa/verify | Verifier le code et activer la 2FA | Oui |
| POST | /account/2fa/disable | Desactiver la 2FA | Oui |
| GET | /account/2fa/status | Statut 2FA | Oui |
| POST | /account/2fa/backup-codes | Regenerer les codes de secours | Oui |
Flux d'activation 2FA
POST /account/2fa/setup-- recoitsecret+qrCodeDataUrl+otpauthUrl- Scanner le QR code avec l'application d'authentification
POST /account/2fa/verifyavec le code a 6 chiffres -- recoit 10 codes de secours- Stocker les codes de secours en lieu sur
Flux de login avec 2FA
Quand la 2FA est activee, le POST /account-auth/login retourne :
{
"requiresTwoFactor": true,
"temporaryToken": "eyJ...",
"expiresIn": 300,
"maskedEmail": "u***@example.com"
}
Le client doit alors appeler :
POST /api/v2/account-auth/verify-2fa
Authorization: Bearer <temporaryToken>
Content-Type: application/json
{
"code": "123456"
}
Le temporaryToken est un JWT avec une TTL de 5 minutes. L'endpoint est rate-limite a 5 tentatives par minute (anti brute-force).
Codes de secours
- 10 codes alphanumeriques a 8 caracteres
- Usage unique
- Regenerables via
POST /account/2fa/backup-codes - Utilisables en remplacement du code TOTP
Securite
| Mesure | Detail |
|---|---|
| Hash des mots de passe | bcrypt (cost 12) |
| Signature des tokens | RS256 |
| Rate limiting login | 5 tentatives / 15 min |
| Stockage des sessions | Redis |
| IP binding | Optionnel |
| Secrets TOTP | Chiffres AES-256-GCM au repos (production) |
Validation des credentials
Email
- Format email valide
- Maximum 255 caracteres
Mot de passe
- Minimum 8 caracteres
- Au moins 1 majuscule
- Au moins 1 chiffre
- Au moins 1 caractere special
Codes d'erreur specifiques
| Code HTTP | Message | Description |
|---|---|---|
| 401 | Invalid credentials | Email ou mot de passe incorrect |
| 401 | Token expired | Token JWT expire |
| 403 | Account suspended | Compte suspendu |
| 409 | Email already exists | Email deja utilise |
| 422 | Validation failed | Donnees invalides |
| 423 | Account locked | Trop de tentatives de connexion |
| 429 | Too many attempts | Rate limit depasse |