Depuis sgcWebSockets 4.4.8, les jetons JWT sont pris en charge sur les composants serveur.
Le composant TsgcHTTP_JWT_Server permet de décoder et de valider les jetons JWT reçus dans le WebSocket Handshake quand on utilise le protocole WebSocket, ou en en-tête HTTP quand on utilise le protocole HTTP.
Configuration
Tu peux configurer les propriétés suivantes dans la propriété JWTOptions du composant :
Si la signature est validée avec une clé publique (algorithmes RS et ES), définis la valeur dans la propriété PublicKey de l'algorithme.
Si la signature est validée avec un secret (algorithmes HS), définis la valeur dans la propriété Secret de l'algorithme.
Pour valider les jetons JWT, attache une instance de TsgcHTTP_JWT_Server à la propriété Authentication.JWT.JWT du serveur WebSocket/HTTP.
oServer := TsgcWebSocketHTTPServer.Create(nil); oServer.Port := 80; oJWT := TsgcHTTP_JWT_Server.Create(nil); oJWT.JWTOptions.Algorithms.RS.PublicKey.Text := 'public key here'; oServer.Authorization.Enabled := True; oServer.Authorization.JWT.JWT := oJWT; oServer.Active := True;
La propriété Checks permet d'activer certaines vérifications dans le Payload du JWT ; par défaut, elle vérifie si les dates d'émission sont valides.
Événements
Utilise les événements suivants pour contrôler le flux de validation du jeton JWT.
OnJWTBeforeRequest
L'événement est appelé quand une nouvelle connexion HTTP / WebSocket est détectée et avant toute validation. Cette connexion peut contenir ou non un jeton JWT.
Si tu ne veux pas traiter cette connexion via la validation JWT, définis le paramètre Cancel à True (la connexion contournera alors les validations JWT).
Par défaut, toutes les connexions continuent le processus de validation JWT.
OnJWTBeforeValidateToken
L'événement est appelé quand la connexion contient un jeton Authorization et avant qu'il soit validé.
Si tu ne veux pas valider ce jeton, définis le paramètre Cancel à True (la connexion contournera alors les validations JWT).
Par défaut, toutes les connexions continuent le processus de validation JWT.
OnJWTBeforeValidateSignature
Cet événement est appelé après que le jeton a été décodé : les paramètres Header et Payload te donnent accès au contenu du JWT, avant que la signature ne soit validée.
Le paramètre Secret est le secret qui sera utilisé pour valider la signature ; il utilise la PublicKey ou le Secret de la propriété JWTOptions. Si ce jeton doit être validé avec un autre secret, la nouvelle valeur peut être affectée au paramètre Secret.
Par défaut, toutes les signatures sont validées.
OnJWTAfterValidateToken
L'événement est appelé après que la signature a été validée : le paramètre Valid indique si la signature est correcte ou non. Si elle ne l'est pas, la connexion est fermée, sinon elle continue.
Tu peux accéder au contenu du Header et du Payload du JWT via les arguments fournis.
S'il y a une erreur de validation du JWT, elle est indiquée dans l'argument Error.
OnJWTException
S'il y a une exception pendant le décodage et la validation du JWT, cet événement est appelé avec le contenu de l'erreur.
