TsgcHTTP_JWT_Client

Skonfiguruj, które biblioteki openSSL będą używane podczas korzystania z klienta JWT.

Wprowadzenie

Komponent TsgcHTTP_JWT_Client umożliwia kodowanie i podpisywanie tokenów JWT dołączonych do klienta WebSocket lub klienta HTTP/2; token będzie automatycznie wysyłany jako nagłówek Authorization Bearer Token.

Konfiguracja

Wartości JWT można skonfigurować we właściwościach JWTOptions. Dostępne są 2 główne właściwości: Header i Payload; należy ustawić wartości dla każdej wymaganej właściwości.

 

Jeśli podpis jest szyfrowany za pomocą klucza prywatnego (algorytmy RS i ES), ustaw wartość we właściwości PrivateKey algorytmu.

Jeśli Podpis jest szyfrowany przy użyciu Sekretu (algorytmy HS), należy ustawić wartość we właściwości Secret Algorytmu.

 

Opcje OpenSSL

Skonfiguruj, które biblioteki openSSL będą używane podczas korzystania z klienta JWT.

 

OpenSSL_Options: konfiguracja bibliotek OpenSSL.

APIVersion: pozwala określić, które API OpenSSL będzie używane.

oslAPI_1_0: używa API 1.0 OpenSSL; jest to najnowsza wersja obsługiwana przez Indy

oslAPI_1_1: używa API 1.1 OpenSSL, wymaga naszej niestandardowej biblioteki Indy i umożliwia korzystanie z bibliotek OpenSSL 1.1.1 (z obsługą TLS 1.3).

oslAPI_3_0: używa API 3.0 OpenSSL, wymaga naszej niestandardowej biblioteki Indy i umożliwia korzystanie z bibliotek OpenSSL 3.0.0 (z obsługą TLS 1.3).

LibPath: tutaj można skonfigurować lokalizację bibliotek openSSL

oslpNone: jest to wartość domyślna; biblioteki OpenSSL powinny znajdować się w tym samym folderze co plik binarny lub w znanej ścieżce.

oslpDefaultFolder: automatycznie ustawia ścieżkę openSSL, w której powinny znajdować się biblioteki dla wszystkich osobowości IDE.

oslpCustomFolder: jeśli ta opcja jest wybrana, należy zdefiniować pełną ścieżkę we właściwości LibPathCustom.

LibPathCustom: gdy LibPath = oslpCustomFolder, należy podać pełną ścieżkę do folderu, w którym znajdują się biblioteki openSSL.

UnixSymLinks: włącz lub wyłącz ładowanie dowiązań symbolicznych w systemach Unix (domyślnie włączone, z wyjątkiem OSX64):

oslsSymLinksDefault: domyślnie jest włączone, z wyjątkiem platformy OSX64 (po MacOS Monterey próba załadowania biblioteki bez wersji kończy się błędem).

oslsSymLinksLoadFirst: Załaduj dowiązania symboliczne przed próbą załadowania bibliotek wersji.

oslsSymLinksLoad: Ładuj dowiązania symboliczne po próbie załadowania bibliotek wersji.

oslsSymLinksDontLoad: nie ładuj dowiązań symbolicznych.

 

Nagłówki niestandardowe

Właściwości Header i Payload zawierają najczęściej używane nagłówki służące do generowania JWT, ale można dodać kolejne nagłówki, wywołując metodę AddKeyValue i przekazując klucz oraz wartość jako parametry.

Przykład: jeśli chcesz dodać nowy rekord do nagłówka JWT ze swoją nazwą, użyj poniższej metody

 


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

 

Po skonfigurowaniu właściwości, aby wygenerować JWT, wystarczy wywołać metodę Sign, która zwróci wartość JWT.

 

Klient WebSocket i JWT

TsgcWebSocketClient umożliwia użycie JWT podczas łączenia się z serwerami WebSocket — wystarczy utworzyć nowego klienta JWT i przypisać go do właściwości 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;

 

Klienci HTTP i JWT

TsgcHTTP2Client oraz TsgcHTTP1Client umożliwiają użycie JWT podczas łączenia się z serwerami HTTP/2 — wystarczy utworzyć nowy klient JWT i przypisać go do właściwości 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');

 

Wygaśnięcie

Token autoryzacyjny może być tworzony na nowo przy każdym wysyłaniu żądania HTTP przy użyciu klienta HTTP lub może być ponownie używany wielokrotnie do momentu wygaśnięcia.

Przykład: wywołanie Apple APNs przy użyciu tokenów wymaga, aby token był ponownie używany przez co najmniej 20 minut i maksymalnie 1 godzinę. Należy użyć właściwości RefreshTokenAfter, aby ustawić liczbę sekund, po których token wygaśnie, np. po 30 minutach.


    RefreshTokenAfter = 60 * 40.

 

Utwórz sygnaturę JWT

Możliwe jest ręczne tworzenie podpisów JWT do stosowania w aplikacjach, które nie korzystają z protokołu WebSocket ani HTTP, lub gdy używane są komponenty firm trzecich i potrzebny jest wyłącznie token JWT.

 

Aby uzyskać podpis JWT, należy utworzyć nową instancję klienta JWT i ręcznie wypełnić właściwości. Po ustawieniu wszystkich właściwości należy wywołać metodę Sign, która zwróci 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);

 

Dokumentacja