Antipadrão: definir um tempo de expiração longo para tokens OAuth

Esta é a documentação da Apigee e da Apigee híbrida.
Confira a documentação da Apigee Edge.

A Apigee oferece um conjunto de ferramentas e políticas que permitem implementar a autenticação baseada em token do OAuth 2.0 para proteger suas APIs. O OAuth2, descrito no IETF RFC 6749, é o padrão aberto mais usado para autenticação e autorização de APIs. Ele estabelece o token como uma credencial de formato padrão que os aplicativos cliente enviam para implementações de API. A implementação da API pode verificar o token para determinar se o cliente está autorizado a acessar a API.

A Apigee permite que os desenvolvedores gerem tokens de acesso e/ou de atualização implementando um dos quatro tipos de concessão do OAuth2: credenciais de cliente, senha, implícito e código de autorização: como usar a política OAuthv2. Além disso, os desenvolvedores de API podem usar o Apigee para implementar concessões personalizadas, incluindo concessões que seguem o padrão de troca de token, conforme descrito na IETF RFC 8693 (em inglês). Os aplicativos clientes usam tokens de acesso para consumir APIs seguras. Cada token de acesso tem seu próprio tempo de expiração, que pode ser definido na política OAuthv2.

A Apigee pode gerar e retornar um token de atualização junto com o token de acesso com alguns dos tipos de concessão. Um cliente usa um token de atualização para receber um novo token de acesso depois que o token de acesso original é revogado ou expira. O tempo de expiração do token de atualização também pode ser definido na política OAuthv2.

Antipadrão

A definição de um tempo de expiração longo para um token de acesso ou um token de atualização na política OAuthv2 leva a uma janela de vulnerabilidade maior em caso de vazamento de token, o que representa um risco de segurança. Isso também pode levar a um acúmulo de tokens OAuth no armazenamento persistente, o que pode resultar em uma diminuição do desempenho ao longo do tempo.

Exemplo 1

O exemplo a seguir de política OAuthV2 mostra um tempo de expiração longo de 10 dias para os tokens de acesso:

<OAuthV2 name="OAuth-GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>864000000</ExpiresIn> <!-- 10 days -->
    <RefreshTokenExpiresIn>864000000</RefreshTokenExpiresIn> <!-- 10 days -->
    <SupportedGrantTypes>
      <GrantType>authorization_code</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

No exemplo acima:

  • O ciclo de vida do token de acesso é definido como 10 dias.
  • O ciclo de vida do token de atualização também está definido como 10 dias.

Impacto

Tokens de acesso de longa duração representam um risco de segurança. Em caso de vazamento ou perda de token, um token de curta duração expira naturalmente e se torna inútil, enquanto um token de longa duração continua concedendo acesso à API por um período potencialmente estendido, aumentando a janela de vulnerabilidade.

Um token de acesso deve ter uma vida útil curta, provavelmente em torno de 30 minutos ou menos, e essa vida útil deve ser substancialmente menor do que a do token de atualização.

Exemplo 2

O exemplo de política OAuthV2 a seguir mostra um tempo de expiração longo de 200 dias para tokens de atualização:

<OAuthV2 name="OAuth-GenerateAccessToken">
  <Operation>GenerateAccessToken</Operation>
  <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
  <RefreshTokenExpiresIn>17280000000</RefreshTokenExpiresIn> <!-- 200 days -->
  <SupportedGrantTypes>
    <GrantType>authorization_code</GrantType>
  </SupportedGrantTypes>
  <GenerateResponse enabled="true"/>
</OAuthV2>

No exemplo acima:

  • O token de acesso é definido com um tempo de expiração razoável e curto de 30 minutos.
  • O token de atualização está definido com um tempo de expiração muito longo de 200 dias.
  • Se o tráfego para essa API for de dez solicitações/segundo, ele poderá gerar até 864.000 tokens em um dia.
  • Os tokens de atualização expiram após 200 dias e se acumulam no repositório de dados durante todo o ciclo de vida.

Impacto

O tempo de vida estendido do token de atualização pode levar à degradação do desempenho ao longo do tempo, já que um grande número de tokens vai se acumular no repositório de dados. No Apigee hybrid, o acúmulo excessivo de tokens também pode contribuir para o esgotamento do espaço em disco na camada de persistência.

Prática recomendada

Use um tempo de expiração para os tokens de acesso e de atualização do OAuth adequado aos seus requisitos de segurança específicos. Isso reduz a janela de vulnerabilidade para tokens vazados e evita o acúmulo de tokens no repositório de dados. Um bom ponto de partida para a vida útil do token de acesso é 30 minutos. Para a vida útil do token de atualização, comece com 24 horas.

Defina o tempo de expiração para os tokens de atualização de maneira que seja válido por um múltiplo do tempo de vida dos tokens de acesso. Por exemplo, se você definir 30 minutos para o token de acesso, defina o ciclo de vida do token de atualização como 24 horas, 7 dias ou o que for adequado para a experiência do usuário que você precisa oferecer.

Leitura adicional