Saltar al contenido principal

Token opaco

Durante el proceso de autenticación, si no se especifica un recurso, Logto emitirá un token de acceso opaco en lugar de un JWT. El token opaco es una cadena aleatoria y es mucho más corto que un JWT:

{
"access_token": "some-random-string", // token opaco
"expires_in": 3600,
"id_token": "eyJhbGc...aBc", // JWT
"scope": "openid profile email",
"token_type": "Bearer"
}

El token opaco se puede usar para llamar al endpoint de userinfo y para acceder a recursos protegidos que requieren autenticación. Dado que no es un JWT, ¿cómo puede el servidor de recursos validarlo?

Logto proporciona un endpoint de introspección que se puede usar para validar tokens opacos. Por defecto, el endpoint de introspección es /oidc/token/introspection y acepta solicitudes POST. Se requiere el siguiente parámetro:

  • token: el token opaco a validar

El endpoint también requiere autenticación del cliente. Puedes usar uno de los siguientes métodos:

  • Autenticación HTTP Basic: Usa el encabezado Authorization con el valor Basic <credenciales-codificadas-en-base64>. Las credenciales deben ser el ID de cliente y el secreto de cliente separados por dos puntos (:) y codificados en base64.
  • Autenticación HTTP POST: Usa los parámetros client_id y client_secret:
    • client_id: el ID de cliente de la aplicación que solicitó el token
    • client_secret: el secreto de cliente de la aplicación que solicitó el token

El ID de cliente (ID de la aplicación) y el secreto de cliente (secreto de la aplicación) pueden ser las credenciales de la aplicación de cualquier aplicación "web tradicional" o "máquina a máquina" en Logto. El endpoint de introspección devolverá un error si las credenciales son inválidas.

El endpoint de introspección devuelve un objeto JSON con los reclamos del token:

{
"active": true, // si el token es válido o no
"sub": "1234567890" // el sujeto del token (el ID del usuario)
}

Si el token es inválido, el campo active será false y el campo sub será omitido.

Aquí tienes un ejemplo no normativo de la solicitud de introspección:

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'

Recuerda reemplazar [tenant-id] con tu ID de inquilino.