Le fonctionnement de Keycloak se base sur des jetons JWT. Or, un jeton JWT n’est pas chiffré. Il est signé numériquement. La signature du jeton garantit son authenticité et son intégrité. Ainsi, unz application qui reçoit une requête HTTP avec un jeton doit impérativement vérifier la signature du jeton avant de s’en servir.
Il y’a deux façons de vérifier la signature d’un jeton JWT Keycloak
Vérification locale au niveau de l’application
Cette méthode de vérification utilise la clé publique du royaume ainsi l’entête du jeton contenant les informations sur l’algorithme de signature. Avec ces éléments, l’application est en mesure de vérifier elle même la signature de chaque jeton qu’elle reçoit.
Avantages:
- Rapidité: la vérification locale est très rapide à faire
- Facilité de mise en place: toutes les librairies OAuth2 offre nativement cette vérification
Inconvénients:
- Sécurité: un jeton révoqué au niveau de Keycloak continuera à être accepté par l’application jusqu’à son expiration.
Vérification via le endpoint userinfo
OAuth2 a prévu un endpoint “userinfo” qui prend un jeton JWT et retourne les claims du jeton. Keycloak implémente ce endpoint. Avant de retourner les claims du jeton, Keycloak s’assure de la validité du jeton, et donc vérifie sa signature. Ainsi, l’appel au endpoint “userinfo” de Keycloak permet à une application de vérifier la validité de la signature du jeton.
Avantages:
- Sécurité: la révocation d’un jeton est immédiatement prise en compte par l’application.
Inconvénients:
- Latence: un appel supplémentaire est fait à Keycloak à chaque requête HTTP contenant un jeton JWT
- Consommation de ressources: Keycloak est sollicité à chaque requête HTTP. Il doit être dimensionné pour supporter cette charge.
- Trafic réseau: Les appels systématiques à Keycloak engendrent une surcharge du réseau. Gare à la saturation du réseau!
Quelle méthode de vérification choisir?
En général, la méthode de vérification locale basée sur la clé publique et l’entête du jeton doit être privilégiée.
La méthode de vérification basée sur l’appel au endpoint userinfo est à envisager uniquement dans le cas d’un besoin particulier qui le justifie.
