Aller au contenu principal

Jeton opaque

Au cours du processus d'authentification, si aucune ressource n'est spécifiée, Logto émettra un jeton d’accès (opaque 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 accéder aux ressources protégées qui nécessitent 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 client. Vous pouvez utiliser l'une des méthodes suivantes :

  • Authentification HTTP Basic : Utilisez l'en-tête Authorization avec la valeur Basic <base64-encoded-credentials>. Les informations d'identification 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_id et client_secret :
    • client_id : l'ID client de l'application qui a demandé le jeton
    • client_secret : le secret client de l'application qui a demandé le jeton

L'ID client (ID de l'application) et le secret client (secret de l'application) peuvent être les informations d'identification de l'application de toute application "web traditionnelle" ou "machine à machine" dans Logto. Le point de terminaison d'introspection renverra une erreur si les informations d'identification sont invalides.

Le point de terminaison d'introspection renvoie un objet JSON avec les Revendications du jeton :

{
"active": true, // 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 la 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.