Vous regardez une version antérieure (v. /doccenter/pages/viewpage.action?pageId=435853158) de cette page.

afficher les différences afficher l'historique de la page

« Afficher la version précédente Vous regardez la version actuelle de cette page. (v. 8) afficher la version suivante »

(V14.4.2)


La révocation de jetons JWT par le serveur de ressources (application exposant les webapis REST) est un élément de sécurisation.
Un jeton dont l'utilité est devenue caduque alors que sa durée de validité n'est pas révolue doit être révoqué. Ainsi il ne peut être utilisé pour s'authentifier malicieusement auprès d'un service
.
L'opération de révocation est réalisée par le biais d'une requête explicite à une webapi dédiée.

Note/mise en garde : l'implémentation de la révocation des jetons par le serveur de ressources casse le paradigme d’une application stateless scalable. Les informations de révocation ne sont pas partageables entre deux instances de l'application.

1. Configuration de la gestion de révocation

La gestion de la révocation n'est pas active par défaut. Pour la rendre opérationnelle, il faut déclarer - dans le fichier Beans.xml - un bean de type JwtRevokeConfiguration

jwtRevokeConfiguration
<bean id="jwtTokensRevocation" class="com.hardis.adelia.webservice.JwtRevokeConfiguration" init-method="loadTokensMap" destroy-method="saveTokensMap">
      <property name="jwtClaimId"               value="jti"/>
      <property name="jwtAuthSelfMode"          value="true"/>
      <property name="jwtPurgeFrequencyTime"    value="3600"/>         
</bean>
  • jwtClaimId : nom du claim identifiant le jeton JWT. Valeur par défaut : "jti'
  • jwtAuthSelfMode : activation de l'autorisation SelfMode. Une requête de révocation n'est autorisée que si l'identifiant du jeton à révoquer correspondant au jeton authentifiant la requête. Valeur par défaut : false.
  • jwtPurgeFrequencyTime : Fréquence (en s) de purge de la table des jetons révoqués. Valeur par défaut : 3600.

    Qui a le droit de révoquer un jeton ?
     
  • jwtAuthSelfMode=false : le jeton peut être révoqué par les utilisateurs portant un rôle particulier. Il faut déclarer une contrainte de sécurité spécifique [JwtSecurityConfiguration] pour le point d’accès de la demande de révocation <jaxrs_base_endpoint>/tokens/revocation.
  • jwtAuthSelfMode=true : le jeton peut être révoqué uniquement par une requête authentifiée par ce même jeton. Ce contrôle vient toujours après le contrôle de l'appartenance à un rôle donné de l'utilisateur authentifié dès lors qu'une contrainte de sécurité est définie pour le endpoint de révocation.

    Persistence de la table des jetons révoqués
  • La table des jetons révoqués subsiste à un redémarrage du serveur de ressources grâce aux méthodes d'initialisation et de terminaison du bean JwtRevokeConfiguration :
    • init-method : loadTokenMaps
    • destroy-method : saveTokensMaps

    Purge de la table des jetons révoqués
  • La table des jetons révoquées est purgée à une fréquence donnée (par défaut toutes les heures). Les jetons purgés sont les jetons révoqués arrivés à expiration.

2. Webapis

Purpose

Api Endpoint

HTTP Verb

Payload 

Response

Status 

Revocation by JwtId  

 

@Path("/tokens/revocation/{jwtId}") 

@DELETE 

- 

true 
false 

200 
403 
404 

Revocation by token

 

@Path("/tokens/revocation") 

 

@POST 

Token 

true 
fase 

200 
403 
404 

Is a token revoked ?

 

@Path("/tokens/revocation/{jwtId}") 

 

@GET 

- 

true 
false 

 

200 
404 

Revoked tokens list

@Path("/tokens/revocation/list") 

 

@GET 

- 

[ { "jwtId": "TokenId__FE706DC72E90060E9E88FB887ACB72E1_25_1619685311434", "revokedBy": "userName", "revocationRequestDate": "2021-04-29T08:35Z", "expirationDate": 1619688911 }, { "jwtId": "TokenId__FE706DC72E90060E9E88FB887ACB72E1_28_1619685265807", "revokedBy": "userName", "revocationRequestDate": "2021-04-29T08:35Z", "expirationDate": 1619688865 } ] 

200 
404 

 

HTTP Code :  

  • Si l’opération aboutit : HTTP Code = 200 

  • Si l’opération échoue car la requête de révocation n’est pas autorisée : HTTP Code = 403 

  • Si le bean JwtRevokeConfiguration n’est pas déclaré (= révocation non active) ou si le jeton interrogé n’est pas trouvé : HTTP Code = 404. 

Media-Type :

  • @Consumes ('application/json')
  • @Produces('application/json')




  • Aucune étiquette