Od sgcWebSockets 4.4.8 tokeny JWT są obsługiwane w komponentach serwerowych.
Komponent TsgcHTTP_JWT_Server umożliwia dekodowanie i walidację tokenów JWT otrzymanych w WebSocket Handshake przy użyciu protokołu WebSocket lub jako nagłówek HTTP przy użyciu protokołu HTTP.
Configuration
Możesz skonfigurować następujące właściwości we właściwości JWTOptions komponentu:
Jeśli podpis jest walidowany za pomocą klucza publicznego (algorytmy RS i ES), ustaw wartość we właściwości PublicKey algorytmu.
Jeśli podpis jest walidowany za pomocą sekretu (algorytmy HS), ustaw wartość we właściwości Secret algorytmu.
Aby walidować tokeny JWT, wystarczy przypisać instancję TsgcHTTP_JWT_Server do właściwości Authentication.JWT.JWT serwera WebSocket/HTTP.
oServer := TsgcWebSocketHTTPServer.Create(nil); oServer.Port := 80; oJWT := TsgcHTTP_JWT_Server.Create(nil); oJWT.JWTOptions.Algorithms.RS.PublicKey.Text := 'public key here'; oServer.Authorization.Enabled := True; oServer.Authorization.JWT.JWT := oJWT; oServer.Active := True;
Właściwość Checks umożliwia włączenie dodatkowych sprawdzeń ładunku JWT; domyślnie sprawdza, czy daty wystawienia są prawidłowe.
Events
Użyj poniższych zdarzeń, aby kontrolować przepływ walidacji tokenu JWT.
OnJWTBeforeRequest
Zdarzenie jest wywoływane przy wykryciu nowego połączenia HTTP / WebSocket, przed jakąkolwiek walidacją. Połączenie to może, ale nie musi, zawierać token JWT.
Jeśli nie chcesz przetwarzać tego połączenia przez walidację JWT, ustaw parametr Cancel na True (to połączenie pominie walidację JWT).
Domyślnie wszystkie połączenia kontynuują proces walidacji JWT.
OnJWTBeforeValidateToken
Zdarzenie jest wywoływane, gdy połączenie zawiera token autoryzacji, przed jego walidacją.
Jeśli nie chcesz walidować tego tokenu, ustaw parametr Cancel na True (to połączenie pominie walidację JWT).
Domyślnie wszystkie połączenia kontynuują proces walidacji JWT.
OnJWTBeforeValidateSignature
Zdarzenie jest wywoływane po zdekodowaniu tokenu; parametry Header i Payload dają dostęp do treści JWT przed walidacją podpisu.
Parametr Secret to sekret używany do walidacji podpisu, pobierany z właściwości JWTOptions (PublicKey lub Secret). Jeśli ten token musi być walidowany innym sekretem, możesz ustawić nową wartość w parametrze Secret.
Domyślnie wszystkie podpisy są walidowane.
OnJWTAfterValidateToken
Zdarzenie jest wywoływane po walidacji podpisu; parametr Valid wskazuje, czy podpis jest prawidłowy. Jeśli nie jest, połączenie zostanie zamknięte, w przeciwnym razie będzie kontynuowane.
Możesz uzyskać dostęp do treści nagłówka i ładunku JWT za pomocą dostarczonych argumentów.
Jeśli podczas walidacji JWT wystąpi błąd, zostanie on przekazany w argumencie Error.
OnJWTException
Jeśli podczas dekodowania lub walidacji JWT wystąpi wyjątek, zdarzenie zostanie wywołane z treścią błędu.
