Antimodèle : définir un délai d'expiration long pour les jetons OAuth

Vous consultez la documentation d'Apigee Edge.
Consultez la documentation Apigee X.
en savoir plus

Apigee Edge fournit le framework OAuth 2.0 pour sécuriser les API. OAuth2 est l'un des schémas les plus courants d'autorisation et d'authentification basée sur les jetons de norme ouverte. Il permet aux applications clientes d'accéder aux API pour le compte d'utilisateurs sans que ces derniers aient besoin de divulguer leur nom d'utilisateur et leur mot de passe.

Apigee Edge permet aux développeurs de générer des jetons d'accès et/ou d'actualisation en implémentant l'un des quatre types d'attribution OAuth2 (identifiants client, mot de passe, implicite et code d'autorisation) à l'aide de la stratégie OAuthv2. Les applications clientes utilisent des jetons d'accès pour utiliser des API sécurisées. Chaque jeton d'accès a son propre délai d'expiration, qui peut être défini dans la stratégie OAuthv2.

Les jetons d'actualisation sont éventuellement fournis avec des jetons d'accès avec certains types de subvention. Les jetons d'actualisation permettent d'obtenir de nouveaux jetons d'accès valides une fois que le jeton d'accès d'origine a expiré ou a été révoqué. Le délai d'expiration des jetons d'actualisation peut également être défini dans la stratégie OAuthv2.

Antimodèle

La définition d'un délai d'expiration long pour un jeton d'accès et/ou un jeton d'actualisation dans la règle OAuthv2 entraîne une accumulation de jetons OAuth et une utilisation accrue de l'espace disque sur les nœuds Cassandra.

L'exemple de stratégie OAuthV2 suivant indique un long délai d'expiration de 200 jours pour les jetons d'actualisation:

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

Dans l'exemple ci-dessus:

  • Le jeton d'accès est défini avec un délai d'expiration raisonnablement inférieur à 30 minutes.
  • Le jeton d'actualisation est défini avec un délai d'expiration très long de 200 jours.
  • Si le trafic vers cette API est de 10 requêtes/seconde, elle peut générer jusqu'à 864 000 jetons par jour.
  • Comme les jetons d'actualisation expirent uniquement après 200 jours, ils sont conservés dans le datastore (Cassandra) pendant une longue période, ce qui permet une accumulation continue.

Impact

  • Augmentation importante de l'utilisation de l'espace disque sur le datastore (Cassandra).
  • Pour les utilisateurs de Private Cloud, cela peut augmenter les coûts de stockage. Dans le pire des cas, le disque peut devenir saturé et entraîner des erreurs d'exécution ou une interruption.

Bonnes pratiques

Définissez un délai d'expiration plus court pour les jetons d'accès OAuth et d'actualisation en fonction de vos exigences de sécurité spécifiques, afin qu'ils soient supprimés rapidement et donc ne s'accumulent pas.

Définissez le délai d'expiration des jetons d'actualisation de sorte qu'ils soient valides pendant une période plus longue que les jetons d'accès. Par exemple, si vous définissez 30 minutes pour le jeton d'accès, puis 60 minutes pour le jeton d'actualisation.

Vous vous assurez ainsi que:

  • Il faut beaucoup de temps pour utiliser un jeton d'actualisation pour générer de nouveaux jetons d'accès et d'actualisation une fois qu'il a expiré.
  • Les jetons d'actualisation expirent un peu plus tard et peuvent être supprimés en temps opportun pour éviter qu'ils ne s'accumulent.

Documentation complémentaire