Da sgcWebSockets 4.4.8 i token JWT sono supportati sui componenti Server.
Il componente TsgcHTTP_JWT_Server permette di decodificare e validare i token JWT ricevuti nell'handshake WebSocket quando si usa il protocollo WebSocket o come header HTTP quando si usa il protocollo HTTP.
Configurazione
Puoi configurare le seguenti proprietà nella proprietà JWTOptions del componente:
Se la firma viene validata usando una chiave pubblica (algoritmi RS ed ES), imposta il valore nella proprietà PublicKey dell'algoritmo.
Se la firma viene validata usando un Secret (algoritmi HS), imposta il valore nella proprietà Secret dell'algoritmo.
Per validare i token JWT, basta collegare un'istanza TsgcHTTP_JWT_Server alla proprietà Authentication.JWT.JWT del server 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;
La proprietà Checks permette di abilitare alcuni controlli sul Payload del JWT, per impostazione predefinita controlla se le date di emissione sono valide.
Eventi
Usa i seguenti eventi per controllare il flusso di validazione del token JWT.
OnJWTBeforeRequest
L'evento viene chiamato quando viene rilevata una nuova connessione HTTP / WebSocket e prima che venga effettuata qualsiasi validazione. Questa connessione può contenere o meno un token JWT.
Se non vuoi elaborare questa connessione usando la validazione JWT, imposta il parametro Cancel a True (significa che questa connessione bypasserà le validazioni JWT).
Per impostazione predefinita, tutte le connessioni continuano il processo di validazione JWT.
OnJWTBeforeValidateToken
L'evento viene chiamato quando la connessione contiene un token di autorizzazione e prima che venga validato.
Se non vuoi validare questo token, imposta il parametro Cancel a True (significa che questa connessione bypasserà le validazioni JWT).
Per impostazione predefinita, tutte le connessioni continuano il processo di validazione JWT.
OnJWTBeforeValidateSignature
Questo evento viene chiamato dopo che il token è stato decodificato, quindi usando i parametri Header e Payload hai accesso al contenuto del JWT e prima che la firma venga validata.
Il parametro Secret è il secret che verrà usato per validare la firma e usa la PublicKey o Secret della proprietà JWTOptions. Se questo token deve essere validato con un altro secret, il nuovo valore può essere impostato sul parametro Secret.
Per impostazione predefinita, tutte le firme vengono validate.
OnJWTAfterValidateToken
L'evento viene chiamato dopo che la firma è stata validata, il parametro Valid mostra se la firma è corretta o meno. Se non è corretta la connessione verrà chiusa, altrimenti la connessione continuerà.
Puoi accedere al contenuto di Header e Payload del JWT usando gli argomenti forniti.
Se c'è un errore nella validazione del JWT, sarà comunicato nell'argomento Error.
OnJWTException
Se c'è un'eccezione durante l'elaborazione della decodifica e validazione del JWT, questo evento verrà chiamato con il contenuto dell'errore.
