TsgcHTTP_JWT_Client

Konfigurieren Sie, welche OpenSSL-Bibliotheken Sie bei der Verwendung des JWT-Clients verwenden.

Einführung

Die Komponente TsgcHTTP_JWT_Client ermöglicht es Ihnen, JWT-Tokens zu codieren und zu signieren, die an einen WebSocket-Client oder HTTP/2-Client angehängt sind; das Token wird automatisch als Authorization-Bearer-Token-Header gesendet.

Konfiguration

Sie können die JWT-Werte in den Eigenschaften JWTOptions konfigurieren; es gibt 2 Haupteigenschaften: Header und Payload; setzen Sie einfach die Werte für jede erforderliche Eigenschaft.

 

Wenn die Signatur mit einem privaten Schlüssel verschlüsselt wird (RS- und ES-Algorithmen), setzen Sie den Wert in der Eigenschaft PrivateKey des Algorithmus.

Wenn die Signatur mit einem Secret (HS-Algorithmen) verschlüsselt ist, setzen Sie den Wert in der Eigenschaft Secret des Algorithmus.

 

OpenSSL-Optionen

Konfigurieren Sie, welche OpenSSL-Bibliotheken Sie bei der Verwendung des JWT-Clients verwenden.

 

OpenSSL_Options: Konfiguration der OpenSSL-Bibliotheken.

APIVersion: ermöglicht die Definition, welche OpenSSL-API verwendet wird.

oslAPI_1_0: verwendet API 1.0 OpenSSL, es ist die neueste von Indy unterstützte

oslAPI_1_1: verwendet API 1.1 OpenSSL, erfordert unsere benutzerdefinierte Indy-Bibliothek und ermöglicht die Verwendung der OpenSSL-1.1.1-Bibliotheken (mit TLS-1.3-Unterstützung).

oslAPI_3_0: verwendet API 3.0 OpenSSL, erfordert unsere benutzerdefinierte Indy-Bibliothek und ermöglicht die Verwendung der OpenSSL-3.0.0-Bibliotheken (mit TLS-1.3-Unterstützung).

LibPath: hier können Sie konfigurieren, wo sich die openSSL-Bibliotheken befinden

oslpNone: dies ist der Standard, die OpenSSL-Bibliotheken sollten sich im selben Ordner befinden, in dem sich die Binärdatei befindet, oder in einem bekannten Pfad.

oslpDefaultFolder: legt automatisch den OpenSSL-Pfad fest, in dem sich die Bibliotheken für alle IDE-Personalities befinden sollten.

oslpCustomFolder: wenn dies die ausgewählte Option ist, definieren Sie den vollständigen Pfad in der Eigenschaft LibPathCustom.

LibPathCustom: wenn LibPath = oslpCustomFolder, definieren Sie hier den vollständigen Pfad, in dem sich die OpenSSL-Bibliotheken befinden.

UnixSymLinks: aktiviert oder deaktiviert das Laden von SymLinks unter Unix-Systemen (standardmäßig aktiviert, außer unter OSX64):

oslsSymLinksDefault: standardmäßig aktiviert, außer unter OSX64 (nach MacOS Monterey schlägt der Versuch fehl, die Bibliothek ohne Version zu laden.).

oslsSymLinksLoadFirst: SymLinks laden und vor dem Versuch, die Versionsbibliotheken zu laden, ausführen.

oslsSymLinksLoad: Lädt SymLinks, nachdem versucht wurde, die Versionsbibliotheken zu laden.

oslsSymLinksDontLoad: lädt die SymLinks nicht.

 

Benutzerdefinierte Header

Die Eigenschaften Header und Payload enthalten die gängigsten Header, die zur Generierung eines JWT verwendet werden, aber Sie können weitere Header hinzufügen, indem Sie die Methode AddKeyValue aufrufen und den Key und Value als Parameter übergeben.

Beispiel: wenn Sie einen neuen Datensatz im JWT-Header mit Ihrem Namen hinzufügen möchten, verwenden Sie die folgende Methode

 


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

 

Nach dem Konfigurieren der Eigenschaften rufen Sie einfach die Methode Sign auf, um das JWT zu generieren, und sie gibt den Wert des JWT zurück.

 

WebSocket Client und JWT

TsgcWebSocketClient ermöglicht die Verwendung von JWT beim Verbinden mit WebSocket-Servern, erstellen Sie einfach einen neuen JWT-Client und weisen Sie ihn der Eigenschaft Authentication.Token.JWT zu.

 


    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;

 

HTTP-Clients und JWT

TsgcHTTP2Client und TsgcHTTP1Client ermöglichen die Verwendung von JWT beim Verbinden mit HTTP/2-Servern; erstellen Sie einfach einen neuen JWT-Client und weisen Sie ihn der Eigenschaft Authentication.Token.JWT zu.

 


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

 

Ablauf

Das Authorization-Token kann jedes Mal neu erstellt werden, wenn Sie eine HTTP-Anfrage über einen HTTP-Client senden, oder es kann mehrmals wiederverwendet werden, bis es abläuft.

Beispiel: Der Aufruf von Apple APNs mit Tokens erfordert, dass das Token mindestens 20 Minuten und höchstens 1 Stunde wiederverwendet wird. Verwenden Sie die Eigenschaft RefreshTokenAfter, um die Sekunden festzulegen, nach denen das Token abläuft, zum Beispiel nach 30 Minuten.


    RefreshTokenAfter = 60 * 40.

 

JWT-Signatur erstellen

Sie können JWT-Signaturen manuell erstellen, um sie in Anwendungen zu verwenden, die kein WebSocket- oder HTTP-Protokoll nutzen, oder wenn Sie Komponenten aus Drittanbieter-Anwendungen verwenden und Sie nur das JWT-Token benötigen.

 

Um die JWT-Signatur zu erhalten, erstellen Sie einfach eine neue Instanz des JWT-Clients und füllen Sie die Eigenschaften manuell aus; wenn alle Eigenschaften gesetzt sind, rufen Sie die Methode Sign auf und sie gibt das JWT-Token zurück.

 


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

 

Referenz