Explorando concessões OIDC: Comprehendendo e resolvendo o erro "invalid_grant"
Aprenda os fundamentais das concessões OpenID Connect (OIDC), e como identificar o erro "invalid_grant".
Aprenda os fundamentais das concessões OpenID Connect (OIDC), e como identificar o erro "invalid_grant".
Na nossa comunidade, costumamos receber frequentemente a mesma pergunta de nossos utilizadores: Qual o problema com o erro "invalid_grant" no Logto? Tal como #503
Esse é um desafio comum e um bloqueador para alguns de nossos utilizadores quando integram o Logto nas suas próprias aplicações. No entanto, as razões por detrás deste erro variam de caso para caso, e por vezes é difícil de explicar com o contexto limitado fornecido. Assim, entender o conceito exato de OIDC e aprender como resolver o problema é essencial para todos.
Agora vamos aprofundar-nos nos fundamentos das concessões OIDC.
Como já introduzimos num post no blog, OpenID Connect (OIDC) é um protocolo construído em cima de OAuth 2.0.
No contexto de OIDC ou OAuth2, uma concessão é um conjunto de permissões concedidas pelo proprietário do recurso (habitualmente o utilizador) a uma aplicação cliente. As concessões são essenciais para a aplicação cliente aceder às informações de identidade do utilizador e a outros recursos protegidos. OIDC define vários tipos de concessões, cada uma adequada para um cenário diferente e a maneira como uma aplicação obtém um token de acesso.
Aqui tem uma analogia para ajudá-lo a entender melhor as concessões OIDC.
Imagine que está a viajar para diferentes países, e cada país exige um visto para a entrada. Neste cenário, o seu passaporte serve como a sua conta de utilizador, contendo as suas informações pessoais. Concessões OIDC são como os meios pelos quais você solicita um visto para entrar num país. Quando um visto é emitido para si, você obtém essencialmente o "token" para entrar nesse país.
Da mesma forma, ao usar uma aplicação, o pedido de concessão é a ação que você solicita ao servidor de autorização para lhe conceder acesso. O servidor de autorização valida a sua identidade, e emite-lhe o "visto" (token de acesso) para iniciar sessão na aplicação.
No Logto, a concessão é persistida no banco de dados como uma entidade de objeto, contendo informações como ID de conta de utilizador, ID de aplicação, recursos OIDC associados e âmbitos, tempo de expiração, e mais. Cada token de atualização e token de acesso está associado a um objeto de concessão específico.
Pedidos HTTP feitos ao servidor de autorização através de APIs. Uma aplicação cliente pode enviar requisições de concessão para o endpoint de token OIDC para vários propósitos, incluindo pedir uma nova concessão (por exemplo, iniciar sessão e obter tokens de atualização e acesso), atualizar detalhes de concessão (por exemplo, trocar um token de atualização por um novo token de acesso), ou revogar uma concessão (por exemplo, revogar todos os tokens emitidos para utilizadores com sessão iniciada e terminar o seu acesso).
Uma requisição de concessão de código de autorização típica é a seguinte:
Encontrar um erro invalid_grant no OIDC indica normalmente que o tipo de concessão ou os dados associados à requisição de concessão são inválidos ou não suportados. Aqui estão algumas razões comuns por detrás deste erro:
invalid_grant. Certifique-se de que está a usar o tipo de concessão apropriado usando os SDKs Logto.invalid_grant.invalid_grant.invalid_grant ocorre se o token de atualização já expirou. Além disso, para maior segurança, o Logto permite rotação do token de atualização por predefinição. Solicitar ao endpoint do token com o mesmo token de atualização uma segunda vez é considerado usar um "token rotativo" e será rejeitado.Algumas dicas para resolver eficazmente o erro "invalid_grant":
invalid_grant, deverá lidar com isso de forma apropriada iniciando novamente um fluxo de início de sessão de utilizador. Se você está a usar SDK Logto, você pode chamar a função signIn() novamente para redirecionar os seus utilizadores de volta para a página de início de sessão.invalid_grant, como "Concessão não encontrada" ou "Token de atualização expirado".O erro invalid_grant pode ser desafiante e confuso para os iniciantes, mas com uma compreensão clara das concessões OIDC e atenção aos detalhes, você pode identificar e resolver o problema por si mesmo. Junte-se às nossas discussões no Discord ou GitHub, e deixe-nos saber se este blog ajudou a esclarecer a confusão e a identificar os problemas com que está deparando. A equipa de desenvolvimento do Logto está sempre pronta para lhe auxiliar.
Juntos, vamos construir uma experiência de autenticação sem problemas e segura para as suas apreciadas aplicações.