Jeton opaque (Opaque token)
Lors du processus d'authentification, si aucune ressource n'est spécifiée, Logto émettra un jeton d’accès opaque (opaque access token) au lieu d'un JWT. Le jeton opaque est une chaîne aléatoire et il est beaucoup plus court qu'un JWT :
{
"access_token": "some-random-string", // jeton opaque
"expires_in": 3600,
"id_token": "eyJhbGc...aBc", // JWT
"scope": "openid profile email",
"token_type": "Bearer"
}
Le jeton opaque peut être utilisé pour appeler le point de terminaison userinfo et pour accéder aux ressources protégées nécessitant une authentification. Puisqu'il ne s'agit pas d'un JWT, comment le serveur de ressources peut-il le valider ?
Logto fournit un point de terminaison d’introspection qui peut être utilisé pour valider les jetons opaques. Par défaut, le point de terminaison d’introspection est /oidc/token/introspection et accepte les requêtes POST. Le paramètre suivant est requis :
token: le jeton opaque à valider
Le point de terminaison nécessite également une authentification du client. Vous pouvez utiliser l'une des méthodes suivantes :
- Authentification HTTP Basic : Utilisez l'en-tête
Authorizationavec la valeurBasic <base64-encoded-credentials>. Les identifiants doivent être l'ID client et le secret client séparés par un deux-points (:) et encodés en base64. - Authentification HTTP POST : Utilisez les paramètres
client_idetclient_secret:client_id: l'ID client de l'application ayant demandé le jetonclient_secret: le secret client de l'application ayant demandé le jeton
L'ID client (ID de l'application) et le secret client (secret de l'application) peuvent être les identifiants d'une application "web traditionnelle" ou "machine à machine" dans Logto. Le point de terminaison d’introspection renverra une erreur si les identifiants sont invalides.
Le point de terminaison d’introspection retourne un objet JSON avec les revendications (claims) du jeton :
{
"active": true, // indique si le jeton est valide ou non
"sub": "1234567890" // le sujet du jeton (l'ID utilisateur)
}
Si le jeton est invalide, le champ active sera à false et le champ sub sera omis.
Voici un exemple non normatif de requête d’introspection :
curl --location \
--request POST 'https://[tenant-id].logto.app/oidc/token/introspection' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'token=some-random-string' \
--data-urlencode 'client_id=1234567890' \
--data-urlencode 'client_secret=1234567890'
N'oubliez pas de remplacer [tenant-id] par votre ID de locataire.
Jeton opaque et organisations
Les jetons opaques peuvent être utilisés pour récupérer les informations d'appartenance à une organisation via le point de terminaison userinfo. Lorsque vous demandez la portée urn:logto:scope:organizations, le point de terminaison userinfo retournera les revendications liées à l'organisation de l'utilisateur, telles que organizations (IDs d'organisation) et organization_data.
Cependant, les jetons opaques ne peuvent pas être utilisés comme jetons d’organisation (organization tokens). Les jetons d’organisation sont toujours émis au format JWT car :
- Les jetons d’organisation contiennent des revendications spécifiques à l'organisation (comme
organization_idet des permissions limitées) qui doivent être validées par les serveurs de ressources. - Le format JWT permet aux serveurs de ressources de vérifier le jeton et d'extraire le contexte organisationnel sans appels API supplémentaires.
Pour obtenir un jeton d’organisation, vous devez utiliser le flux de jeton de rafraîchissement ou le flux client credentials avec des paramètres d'organisation.