Authentification OAuth2
CrowAccounts implémente le flux Authorization Code d'OAuth2. Cette page détaille chaque endpoint ; pour une intégration pas à pas, commence par le démarrage rapide.
Sur cette page
POST /oauth/token grant_type=authorization_code
| Paramètre | Description |
|---|---|
grant_typerequis | Doit valoir authorization_code. |
coderequis | Le code reçu à l'étape précédente. À usage unique, valide 5 minutes. |
client_idrequis | Ton identifiant d'application. |
client_secretrequis | Ton secret d'application. |
redirect_urirequis | Doit être identique, caractère pour caractère, à celle utilisée dans l'appel à /oauth/authorize. |
code_verifierrequis | Doit permettre de retrouver le code_challenge envoyé à /oauth/authorize pour ce login (PKCE, obligatoire pour toutes les applications). L'échange échoue avec invalid_grant s'il est absent ou incorrect. |
Réponse (200) :
{
"access_token": "...",
"refresh_token": "...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "profile email"
}
Un code déjà utilisé, expiré, ou dont le client_id/redirect_uri ne correspond pas exactement à ceux avec lesquels il a été émis renvoie invalid_grant — voir Erreurs & limites.
POST /oauth/token grant_type=refresh_token
| Paramètre | Description |
|---|---|
grant_typerequis | Doit valoir refresh_token. |
refresh_tokenrequis | Ton refresh_token le plus récent. |
client_idrequis | Ton identifiant d'application. |
client_secretrequis | Ton secret d'application. |
Rotation et détection de vol
Chaque appel réussi invalide l'ancien refresh_token et en émet un nouveau, rattaché à la même "famille" de jetons. Ça permet de détecter un vol : si un refresh_token déjà consommé est présenté à nouveau (par exemple parce qu'une copie volée traîne encore quelque part), CrowAccounts en déduit qu'il y a eu fuite et révoque immédiatement toute la famille — access_token compris.
Que faire si ça t'arrive
Une réponse invalid_grant avec le message "Refresh token déjà utilisé" signifie que la session entière a été coupée par sécurité. Il n'y a rien à réparer côté jeton : renvoie l'utilisateur en authentification complète.
Réponse en cas de succès : identique au format de l'échange initial (nouveau access_token + nouveau refresh_token).
GET /oauth/userinfo
Renvoie les champs correspondant au scope accordé pour ce jeton précis. Le détail complet (quels champs pour quel scope, sémantique de email_verified) est sur la page Scopes & profil utilisateur.
Un jeton absent, invalide ou expiré renvoie 401 { "error": "invalid_token" }.
POST /oauth/revoke
À utiliser quand ton propre utilisateur se déconnecte de ton application, pour couper le jeton côté CrowAccounts plutôt que de le laisser vivre jusqu'à expiration naturelle.
| Paramètre | Description |
|---|---|
tokenrequis | Le jeton (access ou refresh) à révoquer. |
token_type_hintoptionnel | access_token ou refresh_token — accélère la recherche, mais n'est qu'une indication : les deux tables sont vérifiées si besoin. |
client_idrequis | Ton identifiant d'application. |
client_secretrequis | Ton secret d'application. |
Révoquer un refresh_token supprime aussi immédiatement l'access_token émis avec, au lieu de le laisser courir jusqu'à sa propre expiration.
Toujours 200
Comme le recommande la RFC, cet endpoint répond systématiquement { "revoked": true }, que le jeton existe, soit déjà expiré, déjà révoqué, ou totalement inconnu. Ce n'est pas un moyen de vérifier si un jeton est valide.
Durée de vie des jetons
| Jeton | Durée de vie |
|---|---|
| Code d'autorisation | 5 minutes, usage unique |
access_token | 1 heure |
refresh_token | 30 jours (renouvelé à chaque rotation) |