Token opaco
Durante o processo de autenticação, se nenhum recurso for especificado, o Logto emitirá um token de acesso opaco em vez de um JWT. O token opaco é uma string aleatória e é muito mais curto que um JWT:
{
"access_token": "some-random-string", // token opaco
"expires_in": 3600,
"id_token": "eyJhbGc...aBc", // JWT
"scope": "openid profile email",
"token_type": "Bearer"
}
O token opaco pode ser usado para chamar o endpoint userinfo e acessar recursos protegidos que requerem autenticação. Como não é um JWT, como o servidor de recursos pode validá-lo?
O Logto fornece um endpoint de introspecção que pode ser usado para validar tokens opacos. Por padrão, o endpoint de introspecção é /oidc/token/introspection
e aceita requisições POST
. O seguinte parâmetro é necessário:
token
: o token opaco a ser validado
O endpoint também requer autenticação do cliente. Você pode usar um dos seguintes métodos:
- Autenticação HTTP Basic: Use o cabeçalho
Authorization
com o valorBasic <base64-encoded-credentials>
. As credenciais devem ser o client ID e o client secret separados por dois pontos (:
) e codificados em base64. - Autenticação HTTP POST: Use os parâmetros
client_id
eclient_secret
:client_id
: o client ID do aplicativo que solicitou o tokenclient_secret
: o client secret do aplicativo que solicitou o token
O client ID (app ID) e o client secret (app secret) podem ser as credenciais do aplicativo de qualquer aplicativo "web tradicional" ou "máquina para máquina" no Logto. O endpoint de introspecção retornará um erro se as credenciais forem inválidas.
O endpoint de introspecção retorna um objeto JSON com as reivindicações do token:
{
"active": true, // se o token é válido ou não
"sub": "1234567890" // o sujeito do token (o ID do usuário)
}
Se o token for inválido, o campo active
será false
e o campo sub
será omitido.
Aqui está um exemplo não normativo da requisição de introspecção:
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'
Lembre-se de substituir [tenant-id]
pelo seu tenant ID.