Configuri quali librerie openSSL utilizzerà quando si usa il client JWT.
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.
È 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.
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.
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.
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;
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');
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.
È 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);