La révocation de jetons JWT par le serveur de ressources est un élément supplémentaire 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 pas ê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.
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.
<bean id="jwtTokensRevocation" class="com.hardis.adelia.webservice.JwtRevokeConfiguration" init-method="loadTokensMap" destroy-method="saveTokensMap" /> ou <bean id="jwtTokensRevocation" class="com.hardis.adelia.webservice.JwtRevokeConfiguration" init-method="loadTokensMap" destroy-method="saveTokensMap"> <property name="jwtClaimId" value="???"/> <!-- default value: jti --> <property name="jwtPurgeFrequencyTime" value="???"/> <!-- default value: 3600 --> </bean>
- jwtClaimId : Nom du claim identifiant le jeton JWT. Valeur par défaut : "jti". Cette information est utile uniquement dans le cas où l'on souhaite savoir si un jeton, identifié par son id, a été révoqué.
- jwtPurgeFrequencyTime : Fréquence de purge, en secondes, de la table des jetons révoqués. Valeur par défaut : 3600. A adapter en fonction de la durée de la validité des jetons.
Qui a le droit de révoquer un jeton ?
Le jeton peut être révoqué uniquement par une requête authentifiée par ce même jeton.
Persistance de la table des jetons révoqués
La table des jetons révoqués subsiste après un redémarrage du serveur de ressources.
Purge de la table des jetons révoqués
La table des jetons révoqués est purgée à une fréquence donnée (par défaut, toutes les heures. Cf. jwtPurgeFrequencyTime). Les jetons révoqués purgés sont les jetons révoqués arrivés à expiration.
Webapis
Objectif | Point d'accès de l'API | Verbe HTTP | Réponse | Statut |
Révocation | /<ContextPath>/<CXF_url-pattern>/tokens/revocation | @DELETE | Media-type : text/plain | 200 |
Est-ce que le jeton jwtId est révoqué ? | /<ContextPath>/<CXF_url-pattern>/tokens/revocation/{jwtId} | @GET | Media-type : text/plain | 200 |
Liste des jetons révoqués | /<ContextPath>/<CXF_url-pattern>/tokens/revocation/list | @GET | Media-type : application/json | 200 |
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 = 401
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.
EXECUTER_HTTP *URL('http://monsite/mawebapp/ws/tokens/revocation') *OPTIONS('--request DELETE --header Accept: text/plain --header Authorization:JWT <jwt_token>') *REPONSE(VarRetCode) *CODE_HTTP(VarHttpCode) Remarque : "<jwt_token>" correspond à la valeur du jeton