OAuth 2.0
Authorization Code avec PKCE pour les clients loopback ; Device Authorization Grant pour les hôtes qui ne peuvent pas lier localhost ; échange sur `/api/oauth/token`, appels `/api/v1` avec le jeton d'accès.
Les clients tiers et officiels utilisent OAuth 2.0. Authorization Code + PKCE est le défaut pour les apps de bureau qui peuvent ouvrir un navigateur et écouter une redirection en loopback. Device Authorization Grant est utilisé lorsque l'hôte ne peut pas lier 127.0.0.1 (Photoshop UXP). Les clients confidentiels avec client_secret sont pris en charge pour les apps serveur enregistrées par les propriétaires d'espace de travail.
Flux client public (Lightroom / Capture One)
1. Plugin opens browser → GET /oauth/authorize?client_id=…&code_challenge=…&redirect_uri=…&scope=…
2. User logs in (if needed) → consent screen (scopes + workspace)
3. Redirect to loopback → ?code=…
4. POST /api/oauth/token (code + code_verifier) → access + refresh tokens
5. API calls → Authorization: Bearer aist_at_…
Les clients de bureau utilisent une redirection en loopback (p. ex. http://127.0.0.1:54321/callback) enregistrée sur l'application OAuth. Les clients publics n'embarquent pas de client_secret.
Flux Device Code (Photoshop)
1. Plugin POST /api/oauth/device_authorization → device_code + user_code + verification_uri
2. Plugin opens browser → /oauth/device (user enters code, signs in, consents)
3. Plugin polls POST /api/oauth/token (grant_type=urn:ietf:params:oauth:grant-type:device_code)
4. On approval → access + refresh tokens
5. API calls → Authorization: Bearer aist_at_…
Voir Photoshop pour l'installation et le parcours Connect.
Endpoints
| Méthode | Chemin | Rôle |
|---|---|---|
| GET | /oauth/authorize | Page de consentement (Authorization Code + PKCE) |
| GET | /oauth/device | UI de vérification / consentement Device Code |
| POST | /api/oauth/device_authorization | Démarrer Device Authorization Grant |
| POST | /api/oauth/token | Échanger code, device_code ou refresh token |
| POST | /api/oauth/revoke | Révoquer access ou refresh token |
Clients plateforme vs personnalisés
| Niveau | Qui enregistre | Tableau de bord |
|---|---|---|
| Plateforme | Ops ArtInStack (oauth_clients Directus) | L'utilisateur voit l'app sous Applications connectées après consentement |
| Espace de travail | Propriétaire de l'espace | Paramètres → Développeur → Applications OAuth |
Lightroom, Capture One et Photoshop officiels utilisent des lignes client propriété de la plateforme. Les photographes ne les enregistrent pas eux-mêmes.
Rafraîchissement
Utilisez le refresh token sur /api/oauth/token avant l'expiration de l'access token. Sérialisez le refresh côté client pour éviter les courses pendant les téléversements concurrents.
