TsgcHTTP_JWT_Client

Configurer les bibliothèques openSSL à utiliser avec le client JWT.

Introduction

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.

Configuration

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.

 

Options OpenSSL

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.

 

En-têtes personnalisés

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.

 

Client WebSocket et 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;

 

Clients HTTP et JWT

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');

 

Expiration

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.

 

Créer une signature JWT

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);

 

Référence