Pular para o conteúdo

Ciclo de vida do token na prática

Todo guia de fluxo OAuth menciona refresh_token, mas uma integração de longa duração (que continua rodando ao longo de muitas requisições, workers ou dias) precisa de mais do que “trocar o token quando ele expirar”. Esta página cobre a duração real dos tokens, como armazenar um token em cache entre workers, quando renová-lo e o que pode invalidar um token antes que ele expiraria naturalmente.


A duração do token de acesso é um único período fixo, igual para todos os fluxos. A do token de atualização não é: depende de qual fluxo OAuth o emitiu.

FluxoTTL do token de acessoTTL do token de atualização
Fluxo Client CredentialsCerca de 1 horaCerca de 30 dias
Fluxo de Aplicativo Nativo (PKCE, redirecionamento loopback)Cerca de 1 horaSem expiração fixa: permanece válido até ser substituído por rotação ou revogado
Fluxo Authorization Code + Redirecionamento PersonalizadoCerca de 1 horaSem expiração fixa: permanece válido até ser substituído por rotação ou revogado

Armazene o token em cache, não gere um por requisição

Seção intitulada “Armazene o token em cache, não gere um por requisição”

Solicitar um novo token de acesso a cada chamada de API, ou de forma independente em cada processo worker, funciona, mas desperdiça uma ida e volta em cada requisição para um token que já é válido por cerca de uma hora. Solicite um token, armazene-o em cache (em memória para um único processo, ou em um armazenamento compartilhado como o Redis para uma frota de workers) pela credencial que o emitiu, e forneça o token em cache para cada requisição até que ele esteja próximo de expirar.

Isso também importa para o token de atualização: quanto menos processos o trocarem de forma independente, menor a chance de você esbarrar na condição de corrida descrita abaixo.

Como a TTL do token de acesso é fixa e conhecida com antecedência, renove de forma proativa: acompanhe quando você obteve o token (ou decodifique seu claim exp) e solicite um novo pouco antes desse momento, em vez de esperar uma requisição falhar primeiro.

Ainda assim, trate uma requisição que falhou como um recurso alternativo, mas diferencie de acordo com o erro recebido:

  • 401 com not_authenticated: a requisição não trazia nenhum token portador utilizável. Isso é um bug do lado do cliente (cabeçalho Authorization ausente ou malformado), não um sinal para renovar.
  • 401 com invalid_token: a verificação de assinatura ou expiração do token falhou. Renove e tente novamente uma vez.
  • 403: nunca é um problema de token. O token é válido; quem chamou não tem o escopo, o acesso ao conteúdo ou o papel que a operação exige. Renovar não vai ajudar. Veja Códigos de erro: Limite de taxa, autenticação e controle de acesso para o detalhamento completo de cada código.

Condições de corrida em renovações simultâneas

Seção intitulada “Condições de corrida em renovações simultâneas”

Um token de atualização é de uso único: trocá-lo com grant_type=refresh_token invalida esse token de atualização e emite juntos um novo token de acesso e um novo token de atualização. Se vários workers compartilham um mesmo token de atualização em cache e dois deles tentam renovar quase ao mesmo tempo, apenas uma das trocas é bem-sucedida; a outra recebe um 401 genérico, não um erro distinto de “já utilizado”.

Nenhum dos eventos abaixo revoga diretamente um token de acesso ainda válido. Cada um bloqueia apenas algo novo (uma nova solicitação de token, ou a próxima renovação) enquanto o token de acesso já em mãos continua funcionando até que sua própria TTL se esgote.

GatilhoEfeito
O segredo de cliente do aplicativo OAuth é rotacionadoNovas solicitações de token ou renovação usando o segredo antigo são rejeitadas imediatamente. Um token de acesso já emitido não é afetado e continua funcionando até expirar naturalmente.
O aplicativo OAuth ou seu usuário de serviço é removidoBloqueia a emissão de novos tokens para esse aplicativo. Tokens já emitidos não são revogados de forma proativa.
Os escopos do aplicativo OAuth são alteradosUm token de acesso já emitido mantém seus escopos originais pelo resto de sua vida útil. O token só passa a usar os novos escopos na próxima renovação ou reemissão.
A concessão é explicitamente revogadaBloqueia imediatamente a próxima tentativa de renovação. O token de acesso ainda válido não é expirado à força e continua funcionando até expirar naturalmente.