Révoquer et approuver des jetons

Cette page s'applique à Apigee et à Apigee hybrid.

Consultez la documentation d'Apigee Edge.

Comprendre la révocation des jetons

Dans certains cas, les applications doivent révoquer ou invalider explicitement des jetons individuels. Par exemple, lorsqu'un utilisateur se déconnecte d'une application compatible OAuth, Un jeton révoqué ne sera plus utile pour l'autorisation. Une fois qu'un jeton a été révoqué, si une application le présente à un proxy d'API, une règle OAuthV2 avec une opération VerifyAccessToken sera refusée.

La norme de révocation des jetons est définie par la norme IETF RFC 7009 : spécification de révocation de jetons OAuth 2.0.

Au lieu de révoquer des jetons spécifiques, vous pouvez révoquer les ID client ou des applications de développeur entières. Pour en savoir plus, consultez la section Révoquer et approuver des clés d'application de développeur. Par rapport à la révocation d'un jeton individuel, la révocation d'un ID client ou d'une application de développeur a un impact plus large. Lorsque vous révoquez un ID client ou une application de développeur, Apigee rejette tous les jetons associés à cet ID client ou à cette application de développeur. Il n'envoie plus de nouveaux jetons pour cet ID client ou cette application de développeur.

Après avoir révoqué un jeton, qu'il s'agisse d'un jeton d'accès ou d'un jeton d'actualisation, vous pouvez éventuellement le réapprouver à tout moment avant son expiration. Après la réapprobation du jeton, la règle Apigee OAuthV2 accepte à nouveau ce jeton pour l'autorisation, jusqu'à son expiration. L'expiration du jeton est indépendante de son état approuvé ou révoqué. La règle Apigee OAuthV2 avec une opération ValidateAccessToken n'accepte un jeton d'accès que si ce jeton est approuvé (ou non révoqué) et n'a pas expiré. De même, la règle Apigee OAuthV2 avec une opération RefreshAccessToken n'accepte un jeton d'actualisation que si ce jeton est approuvé (ou non révoqué) et n'a pas expiré.

Vous pouvez utiliser deux règles pour révoquer des jetons :

La règle OAuthV2 permet de révoquer et de restaurer un jeton à la fois. La règle RevokeOAuthV2 est plus flexible, car elle peut révoquer plusieurs jetons à la fois, par ID d'application ou ID d'utilisateur final. Le reste de cette page décrit comment utiliser la règle OAuthV2 pour révoquer un jeton ou rétablir un jeton précédemment révoqué.

Révoquer des jetons d'accès et d'actualisation

Voici un exemple de configuration pour la règle OAuthV2 qui utilise l'opération InvalidateToken. Dans ce cas, comme l'attribut cascade de l'élément Token est "true", Apigee révoque à la fois le jeton d'accès et le jeton d'actualisation associé.

  <OAuthV2 name="InvalidateToken">
    <Operation>InvalidateToken</Operation>
    <Tokens>
      <Token type="accesstoken" cascade="true">request.queryparam.token</Token>
    </Tokens>
  </OAuthV2>
  

Pour en savoir plus sur le fonctionnement de l'option de cascade, consultez la section ci-dessous sur les attributs de l'élément Token.

Élément <Tokens>/<Token>

Identifie la variable de flux qui spécifie le jeton à révoquer. Si les développeurs doivent envoyer une requête de révocation à l'aide d'un paramètre de requête nommé access_token par exemple, la variable de flux correcte sera request.queryparam.access_token. Pour exiger le jeton dans un en-tête HTTP, définissez cette valeur sur request.header.access_token.

Il n'est pas possible de révoquer un jeton d'accès au format JWT. De plus, il n'est pas possible d'utiliser la règle OAuthV2 pour révoquer un jeton d'actualisation associé à un jeton d'accès au format JWT. Une erreur d'exécution se produit si la variable de contexte spécifiée ici fait référence à un jeton d'accès JWT ou à un jeton d'actualisation associé à un jeton d'accès JWT. Vous pouvez révoquer les jetons d'actualisation associés aux jetons d'accès JWT à l'aide de la règle RevokeOAuthV2.

Attributs

  • type (obligatoire, chaîne) : type de jeton identifié par la variable spécifiée. Les valeurs acceptées sont accesstoken et refreshtoken:
    • Pour révoquer un jeton d'accès, spécifiez le type "accesstoken".
    • Pour révoquer à la fois le jeton d'accès et le jeton d'actualisation, spécifiez le type "refreshtoken". Lorsqu'il voit le type "refreshtoken", Apigee suppose que le jeton est un jeton d'actualisation. Si ce jeton d'actualisation est trouvé, il est révoqué. Si ce jeton d'actualisation est introuvable, Apigee vérifie s'il s'agit d'un jeton d'accès. Si le jeton d'accès existe, il est révoqué.

      Remarque : Si vous transmettez un jeton déjà invalidé à une règle InvalidateToken, celle-ci ne renvoie pas d'erreur, contrairement à ce que vous pourriez attendre. Une telle opération n'a aucun effet.
  • cascade (facultatif, booléen, valeur par défaut : true) : cet attribut sert principalement à révoquer un jeton d'actualisation sans révoquer le jeton d'accès associé. Examinons les cas suivants :
    • Révocation d'un jeton d'actualisation uniquement, sans révoquer le jeton d'accès associé. Pour ce faire, définissez le type <Token> sur refreshtoken et définissez "cascade" sur false.
    • Révocation à la fois du jeton d'accès et du jeton d'actualisation. Pour ce faire, définissez le type <Token> sur accesstoken. La valeur de l'option "cascade" peut être true (valeur par défaut) ou false. Si vous la définissez sur true, le jeton d'accès et le jeton d'actualisation sont tous deux révoqués. Si vous la définissez sur false, le jeton d'accès est révoqué et le jeton d'actualisation est inutilisable. Pour en savoir plus, consultez la remarque ci-dessous.
    • Révocation d'un jeton d'accès, sans révoquer le jeton d'actualisation associé. Cette opération n'est pas prise en charge. Pour en savoir plus, consultez la remarque ci-dessous.

Remarque : Pour des raisons de sécurité, si vous révoquez un jeton d'accès, le jeton d'actualisation associé est également révoqué. Par conséquent, vous ne pouvez pas utiliser l'attribut "cascade" pour révoquer uniquement un jeton d'accès. Par exemple, si vous définissez le type <Token> sur accesstoken et que vous définissez cascade=false, le jeton d'accès est révoqué (comme prévu). Toutefois, le jeton d'actualisation associé est inutilisable. Il ne peut pas être utilisé pour actualiser le jeton d'accès révoqué. L'attribut "cascade" sert principalement lorsque vous ne souhaitez révoquer qu'un jeton d'actualisation. Dans ce cas, définissez le type <Token> sur refreshtoken, et définissez cascade=false. Le jeton d'actualisation sera révoqué, mais le jeton d'accès associé restera valide (jusqu'à ce qu'il expire ou soit révoqué). Pour plus d'informations, consultez cette discussion sur le forum de la communauté.

Approuver des jetons d'accès et d'actualisation

Utilisez l'opération "ValidateToken" pour "approuver de nouveau" un jeton révoqué. En d'autres termes, lorsque vous appliquez cette opération, l'état du jeton d'accès ou d'actualisation ciblé passe de "révoqué" à "approuvé". Vous pouvez valider tout jeton révoqué qui n'a pas encore expiré.

<OAuthV2 name="ValidateToken">
  <Operation>ValidateToken</Operation>
  <Tokens>
    <Token type="refreshtoken" cascade="true">flow.variable</Token>
  </Tokens>
</OAuthV2>

Élément <Tokens>/<Token>

Identifie la variable de flux qui spécifie le jeton à valider. Si les développeurs doivent envoyer une requête de validation à l'aide d'un paramètre de requête nommé access_token, par exemple, la variable de flux correcte sera request.queryparam.access_token. Pour exiger le jeton dans un en-tête HTTP, définissez cette valeur sur request.header.access_token.

Attributs

  • type (obligatoire, chaîne) : type de jeton identifié par la variable spécifiée. Les valeurs acceptées sont accesstoken et refreshtoken.
  • cascade (facultatif, booléen) : par défaut, cette option est définie sur true, ce qui entraîne la propagation de la validation aux jetons associés. Ainsi, si elle est appliquée à un jeton d'actualisation, le jeton d'accès associé est également validé. Si elle est appliquée à un jeton d'accès, le jeton d'actualisation associé est également validé. Si vous la définissez sur false, seul le jeton d'accès ou d'actualisation spécifié est validé.