Skonfiguruj, które biblioteki openSSL będą używane podczas korzystania z klienta JWT.
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.
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.
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.
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.
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;
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');
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.
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);