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 valorBasic <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
yclient_secret
:client_id
: el ID de cliente de la aplicación que solicitó el tokenclient_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.