Português (Portugal)
  • oidc
  • oauth
  • recurso api
  • jwt
  • token de acesso
  • token opaco

Conectando os pontos: Uma exploração aprofundada do recurso OIDC e seus tokens de acesso JWT

Este post do blog visa esclarecer a relação entre os indicadores de recursos do OIDC e seu papel na obtenção de tokens de acesso.

Charles
Charles
Developer

Pare de perder semanas com autenticação de utilizadores
Lance aplicações seguras mais rapidamente com o Logto. Integre a autenticação de utilizadores em minutos e concentre-se no seu produto principal.
Começar
Product screenshot

Contexto

Em uma sessão anterior, nós fornecemos uma introdução ao Protocolo OpenID Connect (OIDC), tokens de atualização, tokens de acesso e ID tokens, componentes essenciais para a construção de uma autenticação robusta em sua aplicação. No entanto, questões ainda permanecem em nossa comunidade, com uma pergunta recorrente: "Por que o meu token de acesso não é um JWT?”

Para aqueles que são novos nos conceitos, ou mesmo para aqueles que precisam de uma reciclagem, este post do blog visa esclarecer a relação entre os indicadores de recursos do OIDC e seu papel na obtenção de tokens de acesso.

Compreendendo o recurso OIDC

Se você está familiarizado com o protocolo OAuth 2.0, o termo “recurso” deve chamar sua atenção. Como o OIDC é construído em cima do OAuth 2.0, ele herda este mesmo conceito.

Um "recurso" ou "recurso protegido" é uma representação de uma entidade que a aplicação do cliente quer acessar em nome do usuário autenticado. Isto pode ser informações do usuário, APIs do servidor, ou qualquer outro dado autorizado pelo seu servidor.

De acordo com o protocolo, o recurso é um parâmetro em solicitações para o servidor de autorização. É um valor representado como um URI absoluto, como https://my-company.com/api. Ele age como um identificador para o recurso, potencialmente correspondendo a um local endereçável por rede ou mesmo a um URI único, mas fictício.

No Logto, você pode criar um “recurso API” através da página “Console de Administração → recursos API”. Você pode se referir a esta documentação para mais detalhes.

Token de acesso JWT

O token de acesso no formato JWT (JSON web token) é emitido apenas quando o parâmetro "recurso" é especificado durante a solicitação do token de acesso, e ele carrega um conjunto de reivindicações, das quais você pode decifrar e validar, por exemplo, para assegurar a integridade do token e as permissões do usuário.

Este "recurso" então se torna um dos reivindicações de token aud no JWT, indicando o público-alvo pretendido para o token. Veja RFC-7519.

Então, a relação se torna clara:

  • Especifique o indicador de recurso ao solicitar um token JWT.
  • O indicador de recurso se alinha com a reivindicação de token aud.
  • Ao fazer solicitações de API, o token de acesso JWT deve ser incluído como o cabeçalho de token do portador. Seu servidor API deve decifrar e validar a reivindicação aud e outras reivindicações relacionadas às permissões para garantir a solicitação da API.
  • Cada token de acesso corresponde a um único recurso. Se você tem múltiplos recursos API registrados com diferentes URIs, solicite tokens de acesso distintos para cada um.

🤔 Mas e se o cliente não especificar o recurso ao solicitar o token de acesso?

Token de acesso opaco

No caso do Logto, se o indicador de recurso não for especificado ao solicitar o token de acesso, o servidor de autorização assume que é para o endpoint OIDC /userinfo, e assim um token de acesso opaco será emitido que pode ser usado posteriormente pelo cliente para solicitar o perfil do usuário, como o ID do usuário, nome, e-mail, etc., a partir do endpoint userinfo OIDC.

Em qualquer SDK do Logto, você pode obter tal token se você chamar getAccessToken() ou diretamente solicitar o endpoint de token OIDC sem especificar o parâmetro resource.

Note que este token de acesso opaco não é adequado para suas próprias solicitações de recursos API, uma vez que não há como verificar sem solicitar o servidor OIDC.

Em resumo

Os recursos OIDC definem dados específicos ou serviços que uma aplicação cliente quer acessar em nome do usuário, com os tokens de acesso JWT servindo como o meio seguro para este acesso. A reivindicação "aud" nos tokens de acesso JWT se alinha com o indicador de recurso, ajudando os servidores na verificação das permissões aquando das solicitações do cliente.

No Logto, o token de acesso opaco é exclusivamente para a obtenção de informações do perfil do usuário a partir do endpoint userinfo OIDC, enquanto os clientes podem solicitar múltiplos tokens de acesso, cada um dedicado a um recurso específico.

Esperamos que este post do blog tenha esclarecido quaisquer dúvidas e conectado os pontos para você. Sinta-se à vontade para nos dizer o que pensa.