Jeton d’accès personnel (Personal access token)
Les jetons d’accès personnels (PATs) offrent un moyen sécurisé pour les utilisateurs d’accorder un jeton d’accès (Access token) sans utiliser leurs identifiants ni une connexion interactive. Ceci est utile pour les CI/CD, les scripts ou les applications qui doivent accéder aux ressources de manière programmatique.
Gestion des jetons d’accès personnels
Utilisation de la Console
Vous pouvez gérer les jetons d’accès personnels dans la page Détails de l’utilisateur du Console > Gestion des utilisateurs. Dans la carte "Authentification (Authentication)", vous pouvez voir la liste des jetons d’accès personnels et en créer de nouveaux.
Utilisation de Management API
Après avoir configuré le Management API, vous pouvez utiliser les points de terminaison API pour créer, lister et supprimer des jetons d’accès personnels.
Utiliser les PATs pour accorder des jetons d’accès
Après avoir créé un PAT, vous pouvez l’utiliser pour accorder des jetons d’accès à votre application en utilisant le point de terminaison d’échange de jetons.
Les jetons d’accès obtenus à l’aide des PATs fonctionnent exactement comme les jetons obtenus via le flux standard refresh_token
. Cela signifie :
- Contexte d’organisation : Les jetons obtenus via PAT prennent en charge les mêmes permissions d’organisation et portées (scopes) que les flux de jeton de rafraîchissement
- Flux d’autorisation : Vous pouvez utiliser les jetons d’accès échangés via PAT pour les permissions d’organisation et les ressources API au niveau de l’organisation
- Validation du jeton : La même logique de validation s’applique – seul le type de grant initial diffère
Si vous travaillez avec des organisations, les modèles d’accès et les permissions sont identiques que vous utilisiez un PAT ou un jeton de rafraîchissement.
Requête
L’application effectue une requête d’échange de jeton vers le point de terminaison de jeton du tenant avec un type de grant spécial en utilisant la méthode HTTP POST. Les paramètres suivants sont inclus dans le corps de la requête HTTP au format application/x-www-form-urlencoded
.
client_id
: OBLIGATOIRE. L’ID client de l’application.grant_type
: OBLIGATOIRE. La valeur de ce paramètre doit êtreurn:ietf:params:oauth:grant-type:token-exchange
pour indiquer qu’un échange de jeton est en cours.resource
: OPTIONNEL. L’indicateur de ressource, identique aux autres requêtes de jeton.scope
: OPTIONNEL. Les portées demandées, identiques aux autres requêtes de jeton.subject_token
: OBLIGATOIRE. Le PAT de l’utilisateur.subject_token_type
: OBLIGATOIRE. Le type du jeton de sécurité fourni dans le paramètresubject_token
. La valeur de ce paramètre doit êtreurn:logto:token-type:personal_access_token
.
Réponse
Si la requête d’échange de jeton réussit, le point de terminaison de jeton du tenant retourne un jeton d’accès qui représente l’identité de l’utilisateur. La réponse inclut les paramètres suivants dans le corps de la réponse HTTP au format application/json
.
access_token
: OBLIGATOIRE. Le jeton d’accès de l’utilisateur, identique aux autres requêtes de jeton commeauthorization_code
ourefresh_token
.issued_token_type
: OBLIGATOIRE. Le type du jeton émis. La valeur de ce paramètre doit êtreurn:ietf:params:oauth:token-type:access_token
.token_type
: OBLIGATOIRE. Le type du jeton. La valeur de ce paramètre doit êtreBearer
.expires_in
: OBLIGATOIRE. La durée de vie en secondes du jeton d’accès.scope
: OPTIONNEL. Les portées du jeton d’accès.
Exemple d’échange de jeton
POST /oidc/token HTTP/1.1
Host: tenant.logto.app
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <base64(client-id:client-secret)>
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange
&scope=profile
&subject_token=pat_W51arOqe7nynW75nWhvYogyc
&subject_token_type=urn%3Alogto%3Atoken-type%3Apersonal_access_token
HTTP/1.1 200 OK
Content-Type: application/json
{
"access_token": "eyJhbGci...zg",
"issued_token_type": "urn:ietf:params:oauth:token-type:access_token",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "profile"
}
Exemple de payload du jeton d’accès :
{
"jti": "iFtbZBeh2M1cTTBuKbHk4",
"sub": "123",
"iss": "https://tenant.logto.app/oidc",
"exp": 1672531200,
"iat": 1672527600,
"scope": "profile",
"client_id": "client-id"
}
Ressources associées
Qu’est-ce qu’un jeton d’accès personnel ? Quand dois-je utiliser des jetons d’accès personnels ?
Jetons d’accès personnels, authentification machine à machine (Machine-to-Machine), et définition des clés API ainsi que leurs scénarios d’utilisation réels