Démarrage rapide
De la création de ton application à ta première requête /oauth/userinfo, en 5 étapes.
Sur cette page
1. Créer ton application
Depuis le dashboard CrowAccounts, va dans Mes applications → Nouvelle application. Renseigne un nom, au moins une redirect_uri (l'URL de ton app vers laquelle CrowAccounts renverra l'utilisateur), et les scopes dont tu as besoin.
À copier immédiatement
La réponse contient ton client_id, ton client_secret et ton webhook_secret. Les deux secrets ne sont affichés qu'une seule fois — s'ils sont perdus, il faudra les régénérer depuis le dashboard.
Voir Gérer son application pour le détail de chaque champ du formulaire.
2. Rediriger l'utilisateur vers CrowAccounts
Avant de rediriger, génère un code_verifier aléatoire côté ton application et stocke-le côté session (jamais côté navigateur en clair) — il sera nécessaire à l'étape 4. Calcule ensuite le code_challenge correspondant :
const code_verifier = crypto.randomBytes(32).toString('base64url');
const code_challenge = crypto.createHash('sha256').update(code_verifier).digest('base64url');
Puis redirige le navigateur de l'utilisateur vers /oauth/authorize avec les paramètres suivants :
GET https://accounts.crowstudios.eu/oauth/authorize
?client_id=ton_client_id
&redirect_uri=https://tonapp.exemple/callback
&response_type=code
&scope=profile email
&state=une_valeur_aleatoire_unique
&code_challenge=le_challenge_calcule_ci_dessus
&code_challenge_method=S256
state n'est pas vérifié par CrowAccounts lui-même : c'est à toi de générer une valeur aléatoire par tentative de connexion, de la stocker côté session, et de vérifier qu'elle correspond à ton retour — c'est ta protection contre le CSRF. Voir Sécurité.
code_challenge est obligatoire pour toutes les applications (PKCE, RFC 7636) — une requête sans lui est refusée. Voir GET /oauth/authorize.
3. Récupérer le code d'autorisation
Après connexion et acceptation de l'écran de consentement, CrowAccounts redirige vers ta redirect_uri avec un code à usage unique :
GET https://tonapp.exemple/callback?code=abcdef123456&state=une_valeur_aleatoire_unique
Si l'utilisateur refuse, tu reçois ?error=access_denied&state=... à la place — voir Erreurs & limites.
4. Échanger le code contre des jetons
Depuis ton serveur (jamais depuis le navigateur : ceci nécessite ton client_secret) :
curl -X POST https://accounts.crowstudios.eu/oauth/token \
-H "Content-Type: application/json" \
-d '{
"grant_type": "authorization_code",
"code": "abcdef123456",
"client_id": "ton_client_id",
"client_secret": "ton_client_secret",
"redirect_uri": "https://tonapp.exemple/callback",
"code_verifier": "le_code_verifier_genere_et_stocke_a_l_etape_2"
}'
Réponse :
{
"access_token": "...",
"refresh_token": "...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "profile email"
}
5. Récupérer le profil utilisateur
curl https://accounts.crowstudios.eu/oauth/userinfo \
-H "Authorization: Bearer ton_access_token"
Voir le détail des champs renvoyés selon le scope accordé dans Scopes & profil utilisateur.
Rafraîchir le jeton
L'access_token expire au bout d'1h. Utilise le refresh_token pour en obtenir un nouveau, sans repasser par l'utilisateur :
curl -X POST https://accounts.crowstudios.eu/oauth/token \
-H "Content-Type: application/json" \
-d '{
"grant_type": "refresh_token",
"refresh_token": "ton_refresh_token",
"client_id": "ton_client_id",
"client_secret": "ton_client_secret"
}'
Le refresh_token tourne à chaque appel
Chaque réponse contient un nouveau refresh_token — écrase systématiquement l'ancien par le nouveau dans ton stockage. Réutiliser un refresh_token déjà consommé est traité comme un vol et coupe toute la session. Détail dans la référence OAuth2.