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

Vous consultez la documentation d'Apigee et d'Apigee hybrid.
Consultez la documentation d'Apigee Edge.

Apigee 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 permet aux développeurs de générer des jetons d'accès et/ou d'actualisation en mettant en œuvre l'un des quatre types d'attributions OAuth2 : identifiants client, mot de passe, implicite et code d'autorisation - en utilisant 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 stratégie OAuthv2 entraîne l'accumulation de jetons OAuth et l'augmentation de l'utilisation de l'espace sur les nœuds Cassandra.

L'exemple de stratégie OAuthV2 suivant affiche un délai d'expiration long 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 raisonnable inférieur à 30 minutes.
  • Le jeton d'actualisation est défini sur 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).

Bonne pratique

Utilisez un délai d'expiration approprié moindre pour les jetons d'accès et d'actualisation OAuth en fonction de vos exigences de sécurité spécifiques, afin qu'ils soient supprimés rapidement et ne puissent pas être accumulés.

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, définissez (au moins) 24 heures pour le jeton d'actualisation.

Ceci garantit les conditions suivantes:

  • Il y a amplement le temps de recourir à un jeton d'actualisation pour générer de nouveaux jetons d'accès et d'actualisation une fois le jeton d'accès 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