Aller au contenu principal

Sécurité des Tokens

Manipulation sécurisée des tokens OAuth.


Types de Tokens

TokenButDurée de vieStockage
AccessAutorisation API1 heureCookie HttpOnly
RefreshObtenir nouvel accès30 joursCookie HttpOnly
IDIdentité utilisateur1 heureMé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

EnvironnementURL
Développementhttp://localhost:3000 (local uniquement)
Productionhttps://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