Configurer les bibliothèques openSSL à utiliser avec le client JWT.
Le composant TsgcHTTP_JWT_Client vous permet d'encoder et de signer des jetons JWT, attaché à un client WebSocket ou à un client HTTP/2, le jeton sera envoyé automatiquement en tant qu'en-tête Authorization Bearer Token.
Vous pouvez configurer les valeurs JWT dans les propriétés JWTOptions, il y a 2 propriétés principales : Header et Payload ; définissez simplement les valeurs pour chaque propriété requise.
Si la signature est chiffrée à l'aide d'une clé privée (algorithmes RS et ES), définissez la valeur dans la propriété PrivateKey de l'algorithme.
Si la signature est chiffrée à l'aide d'un secret (algorithmes HS), définissez la valeur dans la propriété Secret de l'algorithme.
Configurer les bibliothèques openSSL à utiliser avec le client JWT.
OpenSSL_Options : configuration des bibliothèques openSSL.
APIVersion : permet de définir quelle API OpenSSL sera utilisée.
oslAPI_1_0 : utilise l'API 1.0 OpenSSL, la dernière version prise en charge par Indy
oslAPI_1_1 : utilise l'API 1.1 OpenSSL, nécessite notre bibliothèque Indy personnalisée et vous permet d'utiliser les bibliothèques OpenSSL 1.1.1 (avec support TLS 1.3).
oslAPI_3_0 : utilise l'API 3.0 OpenSSL, nécessite notre bibliothèque Indy personnalisée et vous permet d'utiliser les bibliothèques OpenSSL 3.0.0 (avec support TLS 1.3).
LibPath : ici vous pouvez configurer l'emplacement des bibliothèques openSSL
oslpNone : c'est la valeur par défaut ; les bibliothèques OpenSSL doivent se trouver dans le même dossier que le binaire ou dans un chemin connu.
oslpDefaultFolder : définit automatiquement le chemin openSSL où les bibliothèques doivent être situées pour toutes les personnalités de l'IDE.
oslpCustomFolder : si cette option est sélectionnée, définissez le chemin complet dans la propriété LibPathCustom.
LibPathCustom : lorsque LibPath = oslpCustomFolder, définissez ici le chemin complet où se trouvent les bibliothèques openSSL.
UnixSymLinks : activer ou désactiver le chargement des liens symboliques sous les systèmes Unix (activé par défaut, sauf sous OSX64) :
oslsSymLinksDefault : activés par défaut sauf sous OSX64 (après MacOS Monterey, le chargement de la bibliothèque sans version échoue.).
oslsSymLinksLoadFirst : Charger d'abord les liens symboliques avant de tenter de charger les bibliothèques de version.
oslsSymLinksLoad : Charger les liens symboliques après avoir tenté de charger les bibliothèques de version.
oslsSymLinksDontLoad : ne pas charger les SymLinks.
Les propriétés Header et Payload contiennent les en-têtes les plus couramment utilisés pour générer un JWT, mais vous pouvez ajouter d'autres en-têtes en appelant la méthode AddKeyValue et en passant la Clé et la Valeur comme paramètres.
Exemple : si vous souhaitez ajouter un nouvel enregistrement dans l'en-tête JWT avec votre nom, utilisez la méthode suivante
Header.AddKeyValue('name', 'John Smith');
Après avoir configuré les propriétés, pour générer le JWT, appelez simplement la méthode Sign qui retournera la valeur du JWT.
TsgcWebSocketClient permet l'utilisation de JWT lors de la connexion aux serveurs WebSocket, créez simplement un nouveau client JWT et assignez-le à la propriété Authentication.Token.JWT .
oClient := TsgcWebSocketClient.Create(nil);
oClient.URL := 'ws://www.esegece.com:2052';
oJWT := TsgcHTTP_JWT_Client.Create(nil);
oJWT.JWTOptions.Header.alg := jwtRS256;
oJWT.JWTOptions.Payload.sub := '1234567890';
oJWT.JWTOptions.Payload.iat := 1516239022;
oClient.Authentication.Enabled := True;
oClient.Authentication.URL.Enabled := False;
oClient.Authentication.Token.Enabled := True;
oClient.Authentication.Token.JWT := oJWT;
oClient.Active := True;
TsgcHTTP2Client et TsgcHTTP1Client permettent l'utilisation de JWT lors de la connexion à des serveurs HTTP/2 ; créez simplement un nouveau client JWT et assignez-le à la propriété Authentication.Token.JWT .
oHTTP := TsgcHTTP2Client.Create(nil);
oJWT := TsgcHTTP_JWT_Client.Create(nil);
oJWT.JWTOptions.Header.alg := jwtRS256;
oJWT.JWTOptions.Payload.sub := '1234567890';
oJWT.JWTOptions.Payload.iat := 1516239022;
oHTTP.Authentication.Token.JWT := oHTTP;
oHTTP.Get('https://your.api.com');
Le jeton d'autorisation peut être recréé à chaque fois que vous envoyez une requête HTTP en utilisant un client HTTP ou peut être réutilisé plusieurs fois jusqu'à son expiration.
Exemple : appel des APNs Apple en utilisant des jetons, nécessite que le jeton soit réutilisé pendant au moins 20 minutes et au maximum 1 heure. Utilisez la propriété RefreshTokenAfter pour définir le nombre de secondes après lesquelles le jeton expirera, par exemple après 30 minutes.
RefreshTokenAfter = 60 * 40.
Vous pouvez créer des signatures JWT manuellement pour les utiliser dans des applications qui n'utilisent pas le protocole WebSocket ou HTTP, ou si vous utilisez des composants d'applications tierces et que vous avez uniquement besoin du jeton JWT.
Pour obtenir la signature JWT, créez simplement une nouvelle instance du client JWT et renseignez les propriétés manuellement, lorsque toutes les propriétés sont définies, appelez la méthode Sign et elle retournera le jeton JWT.
oJWT := TsgcHTTP_JWT_Client.Create(nil);
// ... header
oJWT.JWTOptions.Header.alg := jwtHS256;
oJWT.JWTOptions.Algorithms.HS.Secret := '79F66F1E-E998-436B-8A0A-3E5DEFA4FD9E';
// ... payload
oJWT.JWTOptions.Payload.jti := '9B66FB94-B761-42B1-A1AF-3C44233DBE87';
oJWT.JWTOptions.Payload.iat := 1630925658;
oJWT.JWTOptions.Payload.iss := '2886EC7547B7BA6A9009';
oJWT.JWTOptions.Payload.exp := 1630933158;
// ... custom payload values
oJWT.JWTOptions.Payload.ClearKeyValues;
oJWT.JWTOptions.Payload.AddKeyValue('origin', 'www.yourwebsite.com');
oJWT.JWTOptions.Payload.AddKeyValue('ip', '69.39.46.178');
// ... get JWT Token
ShowMessage(oJWT.Sign);