Pular para o conteúdo principal

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 valor Basic <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 e client_secret:
    • client_id: o client ID do aplicativo que solicitou o token
    • client_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.