La sécurisation des APIs est devenue un enjeu critique dans le paysage des menaces actuelles. Avec la multiplication des services web et applications distribuées, OAuth 2.0 et JWT (JSON Web Tokens) constituent des standards incontournables pour implémenter une authentification et une autorisation robustes. Dans cet article, nous analyserons en détail ces protocoles sous l'angle de la sécurité offensive et défensive.
Fondamentaux de OAuth 2.0 et JWT
OAuth 2.0 est un framework d'autorisation permettant à une application tierce d'accéder à des ressources protégées au nom d'un utilisateur. JWT quant à lui est un format de token auto-contenu permettant de transmettre des informations de manière sécurisée entre différentes parties.
Architecture OAuth 2.0
Le flux typique OAuth implique 4 acteurs :
- Resource Owner : l'utilisateur final
- Client : l'application tierce
- Authorization Server : serveur d'authentification
- Resource Server : serveur hébergeant les ressources protégées
Structure d'un JWT
// Format d'un JWT
header.payload.signature
// Exemple de Header
{
"alg": "RS256",
"typ": "JWT"
}
// Exemple de Payload
{
"sub": "1234567890",
"name": "John Doe",
"exp": 1516239022
}
Analyse de Sécurité et Vulnérabilités Courantes
Les implémentations OAuth et JWT peuvent présenter plusieurs vulnérabilités critiques :
Attaques sur OAuth
// Script Python pour tester la vulnérabilité CSRF sur le endpoint OAuth
import requests
def test_csrf_vulnerability(auth_endpoint):
# Création d'une requête d'authentification malicieuse
params = {
'client_id': 'legitimate_app',
'redirect_uri': 'https://attacker.com/callback',
'response_type': 'token'
}
response = requests.get(auth_endpoint, params=params)
return 'token' in response.url
Vulnérabilités JWT
// Script pour tester la signature d'un JWT avec l'algorithme "none"
const jwt = require('jsonwebtoken');
const maliciousToken = jwt.sign(
{ admin: true },
'any-key',
{ algorithm: 'none' }
);
// Test de validation
try {
const decoded = jwt.verify(maliciousToken, 'wrong-key', {
algorithms: ['none']
});
console.log('Vulnérable !');
} catch(err) {
console.log('Protégé');
}
Bonnes Pratiques de Sécurisation
Pour sécuriser vos implémentations :
- Utilisez systématiquement TLS
- Validez rigoureusement les redirect_uri
- Implémentez le PKCE pour les clients publics
- Utilisez des algorithmes de signature robustes (RS256, ES256)
- Définissez des durées de validité courtes pour les tokens
Configuration Sécurisée
// Configuration OAuth2 sécurisée avec Spring Security
@Configuration
@EnableWebSecurity
public class OAuth2SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.oauth2ResourceServer()
.jwt()
.jwtAuthenticationConverter(jwtAuthenticationConverter())
.and()
.authorizeRequests()
.antMatchers("/api/").authenticated()
.and()
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
}
}
Tests de Pénétration
Voici les principales étapes pour auditer une implémentation OAuth/JWT :
// Script Python utilisant OWASP ZAP API
from zapv2 import ZAPv2
def audit_oauth_endpoints(target_url):
zap = ZAPv2()
# Configuration du scan
scan_config = {
'ATTACK_STRENGTH': 'HIGH',
'ALERT_THRESHOLD': 'MEDIUM'
}
# Lancement du scan actif
scan_id = zap.ascan.scan(
target_url,
scanpolicyname='OAuth-JWT-Policy',
scan_config
)
return zap.ascan.alerts()
Monitoring et Détection d'Incidents
La surveillance des systèmes OAuth/JWT nécessite :
- Logging des événements d'authentification
- Détection des anomalies dans l'utilisation des tokens
- Alerting sur les tentatives de rejeu
// Configuration ELK pour la détection d'anomalies
{
"query": {
"bool": {
"must": [
{
"match": {
"event_type": "token_validation"
}
}
],
"filter": {
"range": {
"timestamp": {
"gte": "now-15m"
}
}
}
}
},
"aggs": {
"token_usage": {
"terms": {
"field": "token_id"
}
}
}
}
Conclusion
La sécurisation d'OAuth 2.0 et JWT requiert une approche holistique combinant configuration appropriée, monitoring continu et tests réguliers. Les équipes de sécurité doivent rester vigilantes face aux nouvelles vulnérabilités et adapter leurs pratiques en conséquence.
Pour approfondir le sujet, consultez les ressources OWASP dédiées et maintenez une veille active sur les CVE liées à ces technologies.