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

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

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

Charles
Charles
Developer

Pare de perder semanas com autenticação de usuários
Lance aplicativos seguros mais rapidamente com o Logto. Integre a autenticação de usuários 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 tokens ID, componentes essenciais para a construção de autenticação robusta em seu aplicativo. No entanto, perguntas ainda persistem em nossa comunidade, com uma pergunta recorrente: "Por que 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 no blog visa esclarecer a relação entre os indicadores de recursos OIDC e seu papel na obtenção de tokens de acesso.

Entendendo o recurso OIDC

Se você está familiarizado com o protocolo OAuth 2.0, o termo “recurso” deve soar familiar. Como OIDC foi construído sobre o OAuth 2.0, herda este mesmo conceito.

Um "recurso" ou "recurso protegido" é uma representação de uma entidade que o aplicativo cliente deseja acessar em nome do usuário autenticado. Isso 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 nas solicitações para o servidor de autorização. É um valor representado como um URI absoluto, como https://minha-empresa.com/api. Age como um identificador para o recurso, potencialmente correspondendo a um local acessível pela rede ou até mesmo a um URI único, porém 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 formato JWT é emitido apenas quando o parâmetro "recurso" é especificado durante a solicitação do token de acesso, e ele carrega um conjunto de reivindicações, que você pode descriptografar e validar, por exemplo, para garantir a integridade do token e as permissões do usuário.

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

Portanto, a relação fica clara:

  • Especifique o indicador de recurso ao solicitar um token JWT.
  • O indicador de recurso se alinha com a reivindicação do token aud.
  • Ao fazer solicitações de API, o token de acesso JWT deve ser incluído como o cabeçalho do token do portador. Seu servidor de API deve descriptografar e validar a reivindicação aud e outras reivindicações relacionadas à permissão para proteger a solicitação de API.
  • Cada token de acesso corresponde a um único recurso. Se você tiver vários recursos de API registrados com URIs diferentes, 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 é especificado ao solicitar o token de acesso, o servidor de autorização supõe que é para o endpoint OIDC /userinfo, e assim um token de acesso opaco será emitido que pode ser usado mais tarde pelo cliente para solicitar o perfil do usuário, como ID do usuário, nome, email, etc., a partir do endpoint OIDC userinfo.

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

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

Em resumo

Recursos OIDC definem dados específicos ou serviços que um aplicativo cliente deseja acessar em nome do usuário, com 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 servidores a verificar permissões em solicitações de clientes.

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

Esperamos que este post no blog elimine quaisquer dúvidas e conecte os pontos para você. Sinta-se à vontade para nos dizer o que você pensa.