Passer au contenu principal
Twenty implémente OAuth 2.0 avec code d’autorisation + PKCE pour les applications destinées aux utilisateurs et des identifiants client pour l’accès serveur à serveur. Les clients sont enregistrés dynamiquement via RFC 7591 — aucune configuration manuelle dans un tableau de bord.

Quand utiliser OAuth

ScénarioMéthode d’authentification
Scripts internes, automatisationClé API
Application externe agissant au nom d’un utilisateurOAuth — Code d’autorisation
Serveur à serveur, aucun contexte utilisateurOAuth — Identifiants client
Application Twenty avec des extensions d’interface utilisateurApplications (OAuth est géré automatiquement)

Enregistrer un client

Twenty prend en charge l’enregistrement dynamique de clients conformément à RFC 7591. Aucune configuration manuelle requise — enregistrez le client par programmation :
POST /oauth/register
Content-Type: application/json

{
  "client_name": "My Integration",
  "redirect_uris": ["https://myapp.com/callback"],
  "grant_types": ["authorization_code"],
  "token_endpoint_auth_method": "client_secret_post"
}
Réponse:
{
  "client_id": "abc123",
  "client_secret": "secret456",
  "client_name": "My Integration",
  "redirect_uris": ["https://myapp.com/callback"]
}
Stockez le client_secret en toute sécurité — il ne peut pas être récupéré ultérieurement.

Périmètres

PérimètreAccès
apiAccès complet en lecture/écriture aux API Core et Metadata
profilLire les informations de profil de l’utilisateur authentifié
Demandez les périmètres sous forme de chaîne séparée par des espaces : scope=api profile

Flux de code d’autorisation

Utilisez ce flux lorsque votre application agit au nom d’un utilisateur Twenty.

1. Rediriger l’utilisateur vers l’écran d’autorisation

GET /oauth/authorize?
  client_id=YOUR_CLIENT_ID&
  response_type=code&
  redirect_uri=https://myapp.com/callback&
  scope=api&
  state=random_state_value&
  code_challenge=CHALLENGE&
  code_challenge_method=S256
ParamètreObligatoireDescription
client_idOuiVotre identifiant client enregistré
response_typeOuiDoit être code
redirect_uriOuiDoit correspondre à une URI de redirection enregistrée
scopeNonPérimètres séparés par des espaces (par défaut : api)
étatRecommandéChaîne aléatoire pour empêcher les attaques CSRF
code_challengeRecommandéDéfi PKCE (hachage SHA-256 du vérificateur, encodé en base64url)
code_challenge_methodRecommandéDoit être S256 lors de l’utilisation de PKCE
L’utilisateur voit un écran de consentement et approuve ou refuse l’accès.

2. Gérer la redirection

Après l’autorisation, Twenty redirige vers votre redirect_uri :
https://myapp.com/callback?code=AUTH_CODE&state=random_state_value
Vérifiez que state correspond à ce que vous avez envoyé.

3. Échanger le code contre des jetons

POST /oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&
code=AUTH_CODE&
redirect_uri=https://myapp.com/callback&
client_id=YOUR_CLIENT_ID&
client_secret=YOUR_CLIENT_SECRET&
code_verifier=YOUR_PKCE_VERIFIER
Réponse:
{
  "access_token": "eyJhbG...",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "dGhpcyBpcyBh..."
}

4. Utiliser le jeton d’accès

GET /rest/companies
Authorization: Bearer ACCESS_TOKEN

5. Actualiser à l’expiration

POST /oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&
refresh_token=YOUR_REFRESH_TOKEN&
client_id=YOUR_CLIENT_ID&
client_secret=YOUR_CLIENT_SECRET

Flux des identifiants client

Pour les intégrations serveur à serveur sans interaction utilisateur :
POST /oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&
client_id=YOUR_CLIENT_ID&
client_secret=YOUR_CLIENT_SECRET&
scope=api
Le jeton renvoyé dispose d’un accès au niveau de l’espace de travail, non lié à un utilisateur spécifique.

Découverte du serveur

Twenty publie sa configuration OAuth à un point de découverte standard :
GET /.well-known/oauth-authorization-server
Cela renvoie tous les points de terminaison, les types d’octroi pris en charge, les périmètres et les capacités — utile pour créer des clients OAuth génériques.

Résumé des points de terminaison API

Point de terminaisonObjectif
/.well-known/oauth-authorization-serverDécouverte des métadonnées du serveur
/oauth/registerEnregistrement dynamique de clients
/oauth/authorizeAutorisation de l’utilisateur
/oauth/tokenÉchange et actualisation de jetons
EnvironnementURL de base
Cloudhttps://api.twenty.com
Auto-hébergéhttps://{your-domain}

OAuth vs clés API

Clés APIOAuth
InstallationGénérer dans ParamètresEnregistrer un client, implémenter le flux
Contexte utilisateurAucun (au niveau de l’espace de travail)Autorisations d’un utilisateur spécifique
Idéal pourScripts, outils internesApplications externes, intégrations multi-utilisateurs
Rotation des jetonsManuelAutomatique via des jetons d’actualisation
Accès par périmètreAccès complet à l’APIGranulaire via des périmètres