Sécurité des Tokens
Manipulation sécurisée des tokens OAuth.
Types de Tokens
| Token | But | Durée de vie | Stockage |
|---|---|---|---|
| Access | Autorisation API | 1 heure | Cookie HttpOnly |
| Refresh | Obtenir nouvel accès | 30 jours | Cookie HttpOnly |
| ID | Identité utilisateur | 1 heure | Mémoire uniquement |
Stockage Sécurisé
Recommandé : Cookies HttpOnly
Le SDK stocke les tokens dans des cookies HttpOnly :
Cookie: syauth_access_token=eyJ...
syauth_refresh_token=def...
Avantages :
- Ne peuvent pas être accédés par JavaScript
- Protection CSRF automatique avec SameSite
- Le flag Secure nécessite HTTPS
Non Recommandé : localStorage
Ne stockez jamais les tokens dans localStorage :
// ❌ NE FAITES JAMAIS CELA
localStorage.setItem('access_token', token);
Risques :
- Les attaques XSS peuvent voler les tokens
- Persiste au-delà de la session
- Pas de contrôle d'expiration
Transmission de Token
Header Authorization
fetch('/api/resource', {
headers: {
'Authorization': `Bearer ${accessToken}`
}
});
Utilisez Toujours HTTPS
| Environnement | URL |
|---|---|
| Développement | http://localhost:3000 (local uniquement) |
| Production | https://votreapp.com |
Validation de Token
Validation Côté Serveur
Validez toujours les tokens sur votre backend :
async function validateToken(accessToken: string) {
const response = await fetch('https://api.syauth.com/e/v1/oauth/userinfo', {
headers: { 'Authorization': `Bearer ${accessToken}` }
});
if (!response.ok) {
throw new Error('Token invalide');
}
return response.json();
}
Validation JWT
Pour une validation locale sans appel API :
import jwt from 'jsonwebtoken';
function validateJWT(token: string) {
try {
const decoded = jwt.verify(token, publicKey, {
algorithms: ['RS256'],
audience: process.env.SYAUTH_CLIENT_ID,
issuer: 'https://api.syauth.com/e/v1'
});
return decoded;
} catch (error) {
return null;
}
}
Rafraîchissement de Token
Automatique (SDK)
Le SDK rafraîchit les tokens automatiquement :
const { getAccessToken } = useSyAuth();
// Retourne toujours un token valide (rafraîchit si nécessaire)
const token = await getAccessToken();
Manuel (API)
POST https://api.syauth.com/e/v1/oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token
&refresh_token=current_refresh_token
&client_id=xxx
Révocation de Token
Token Unique
POST https://api.syauth.com/e/v1/oauth/revoke
Content-Type: application/x-www-form-urlencoded
token=token_a_revoquer
&client_id=xxx
Tous les Tokens Utilisateur
Utilisez le Tableau de bord ou l'API pour révoquer tous les tokens d'un utilisateur.
Liste de Refus (Denylist) de Token
SyAuth maintient une liste de refus de tokens pour :
- Tokens explicitement révoqués
- Tokens issus de changements de mot de passe
- Tokens issus d'événements de sécurité
Les tokens sur liste de refus sont rejetés immédiatement.
Checklist de Sécurité
- Tokens stockés dans des cookies HttpOnly
- Ne jamais logger les tokens
- Valider les tokens côté serveur
- Utiliser des durées de vie courtes pour les access token
- Implémenter le rafraîchissement de token
- Gérer la révocation de token
- Surveiller l'utilisation des tokens
Prochaines Étapes
- PKCE Expliqué - Sécurité du code d'autorisation
- Bonnes Pratiques - Sécurité générale