TsgcHTTP_JWT_Client

Configuri quali librerie openSSL utilizzerà quando si usa il client JWT.

Introduzione

Il componente TsgcHTTP_JWT_Client consente di codificare e firmare token JWT, collegato a un client WebSocket o a un client HTTP/2; il token verrà inviato automaticamente come Authorization Bearer Token Header.

Configurazione

È possibile configurare i valori JWT nelle proprietà JWTOptions, ci sono 2 proprietà principali: Header e Payload; impostare i valori per ogni proprietà richiesta.

 

Se la firma è crittografata con una chiave privata (algoritmi RS ed ES), impostare il valore nella proprietà PrivateKey dell'algoritmo.

Se la firma è cifrata utilizzando un Secret (algoritmi HS), impostare il valore nella proprietà Secret dell'Algorithm.

 

Opzioni OpenSSL

Configuri quali librerie openSSL utilizzerà quando si usa il client JWT.

 

OpenSSL_Options: configurazione delle librerie openSSL.

APIVersion: consente di definire quale API OpenSSL verrà utilizzata.

oslAPI_1_0: utilizza l'API OpenSSL 1.0, l'ultima supportata da Indy

oslAPI_1_1: utilizza le API OpenSSL 1.1, richiede la nostra libreria Indy personalizzata e consente di utilizzare le librerie OpenSSL 1.1.1 (con supporto TLS 1.3).

oslAPI_3_0: utilizza OpenSSL API 3.0, richiede la nostra libreria Indy personalizzata e consente l'uso delle librerie OpenSSL 3.0.0 (con supporto TLS 1.3).

LibPath: qui è possibile configurare la posizione delle librerie openSSL

oslpNone: questa è l'impostazione predefinita; le librerie openSSL devono trovarsi nella stessa cartella del binario o in un percorso noto.

oslpDefaultFolder: imposta automaticamente il percorso openSSL dove le librerie devono essere situate per tutte le personalità IDE.

oslpCustomFolder: se questa è l'opzione selezionata, definire il percorso completo nella proprietà LibPathCustom.

LibPathCustom: quando LibPath = oslpCustomFolder, definire qui il percorso completo dove si trovano le librerie openSSL.

UnixSymLinks: abilita o disabilita il caricamento dei SymLink sui sistemi Unix (per impostazione predefinita è abilitato, tranne che su OSX64):

oslsSymLinksDefault: per impostazione predefinita sono abilitati, eccetto su OSX64 (dopo MacOS Monterey si verifica un errore nel tentativo di caricare la libreria senza versione.).

oslsSymLinksLoadFirst: Carica i SymLink e li elabora prima di tentare il caricamento delle librerie di versione.

oslsSymLinksLoad: Carica i SymLink dopo aver tentato di caricare le librerie di versione.

oslsSymLinksDontLoad: non caricare i SymLink.

 

Intestazioni Personalizzate

Le proprietà Header e Payload contengono le intestazioni più comuni utilizzate per generare un JWT, ma è possibile aggiungere altre intestazioni chiamando il metodo AddKeyValue e passando Key e Value come parametri.

Esempio: se si desidera aggiungere un nuovo record nell'intestazione JWT con il proprio nome, utilizzare il seguente metodo

 


    Header.AddKeyValue('name', 'John Smith');

 

Dopo aver configurato le proprietà, per generare il JWT è sufficiente chiamare il metodo Sign che restituirà il valore del JWT.

 

Client WebSocket e JWT

TsgcWebSocketClient consente l'uso di JWT durante la connessione ai server WebSocket; è sufficiente creare un nuovo client JWT e assegnarlo alla proprietà Authentication.Token.JWT property.

 


    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;

 

Client HTTP e JWT

TsgcHTTP2Client e TsgcHTTP1Client consentono l'utilizzo di JWT durante la connessione ai server HTTP/2; è sufficiente creare un nuovo client JWT e assegnarlo alla proprietà Authentication.Token.JWT property.

 


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

 

Scadenza

L'Authorization Token può essere ricreato ogni volta che si invia una richiesta HTTP utilizzando un client HTTP oppure può essere riutilizzato più volte fino alla sua scadenza.

Esempio: la chiamata ad Apple APNs tramite Token richiede che il token venga riutilizzato per almeno 20 minuti e per un massimo di 1 ora. Utilizzare la proprietà RefreshTokenAfter per impostare i secondi dopo i quali il token scadrà, ad esempio dopo 30 minuti.


    RefreshTokenAfter = 60 * 40.

 

Crea firma JWT

È possibile creare Firme JWT manualmente da utilizzare in applicazioni che non fanno uso del protocollo WebSocket o HTTP, o se si utilizzano componenti di applicazioni di terze parti e si ha bisogno solo del Token JWT.

 

Per ottenere la firma JWT, è sufficiente creare una nuova istanza del client JWT e compilare manualmente le proprietà; quando tutte le proprietà sono impostate, chiamare il metodo Sign che restituirà il Token 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);

 

Riferimento