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 aceito para autenticação e autorização de APIs. Ele estabelece o token como uma credencial de formato padrão que os aplicativos clientes 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 APIs podem usar o Apigee para implementar permissões personalizadas, incluindo permissões que seguem o padrão de troca de tokens, conforme descrito no IETF RFC 8693. Os aplicativos clientes usam os 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 for revogado ou expirar. 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 aumenta a janela de vulnerabilidade 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 na loja persistente, o que pode resultar em uma queda no desempenho ao longo do tempo.

Exemplo 1

O exemplo de política OAuthV2 a seguir 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 está definido como 10 dias.
  • A vida útil do token de atualização também é definida como 10 dias.

Impacto

Os 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 vai expirar naturalmente e se tornar inútil, enquanto um token de longa duração vai continuar concedendo acesso à API por um período potencialmente longo, aumentando a janela de vulnerabilidade.

Um token de acesso precisa ter uma vida útil curta, provavelmente cerca de 30 minutos ou menos, e essa vida útil precisa 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 10 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 por toda a vida útil.

Impacto

A vida útil estendida 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 híbrido, 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 OAuth que seja adequado para seus requisitos de segurança específicos, para reduzir a janela de vulnerabilidade de tokens vazados e evitar o acúmulo de tokens no repositório de dados. Um bom ponto de partida para a vida útil do token de acesso é de 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 da duração 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 apropriado para a experiência do usuário que você precisa oferecer suporte.

Leitura adicional