Documentation / Démarrage Démarrage rapide
Démarrage

Démarrage rapide

De la création de ton application à ta première requête /oauth/userinfo, en 5 étapes.

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 :

js
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 :

http
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 :

http
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) :

bash
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 :

json
{
  "access_token": "...",
  "refresh_token": "...",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "profile email"
}

5. Récupérer le profil utilisateur

bash
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 :

bash
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.