JWT Delphi-server

· Componenten

Vanaf sgcWebSockets 4.4.8 worden JWT-tokens ondersteund op servercomponenten.

Met de component TsgcHTTP_JWT_Server kun je JWT-tokens decoderen en valideren die zijn ontvangen in de WebSocket-handshake bij gebruik van het WebSocket-protocol of als HTTP-header bij gebruik van het HTTP-protocol.

Configuratie 

De volgende properties kun je configureren in de property JWTOptions van de component:

Als de signature wordt gevalideerd met een public key (RS- en ES-algoritmes), stel de waarde dan in op de property PublicKey van het algoritme.

Als de signature wordt gevalideerd met een secret (HS-algoritmes), stel de waarde dan in op de property Secret van het algoritme.

Om JWT-tokens te valideren, koppel je een TsgcHTTP_JWT_Server-instantie aan de property Authentication.JWT.JWT van de WebSocket/HTTP-server.

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; 

Met de property Checks kun je extra controles op de payload van de JWT inschakelen; standaard wordt gecontroleerd of de uitgifte-data geldig zijn.

Events 

Gebruik de volgende events om de flow van de JWT-validatie te bepalen.

OnJWTBeforeRequest

Dit event wordt aangeroepen wanneer een nieuwe HTTP/WebSocket-verbinding wordt gedetecteerd en voordat er enige validatie plaatsvindt. Deze verbinding kan al dan niet een JWT-token bevatten.

Wil je deze verbinding niet via JWT-validatie verwerken, zet dan de parameter Cancel op True (dit betekent dat deze verbinding de JWT-validaties overslaat).

Standaard zetten alle verbindingen het JWT-validatieproces voort.

OnJWTBeforeValidateToken

Dit event wordt aangeroepen wanneer de verbinding een Authorization-token bevat en voordat deze is gevalideerd.

Wil je dit token niet valideren, zet dan de parameter Cancel op True (dit betekent dat deze verbinding de JWT-validaties overslaat).

Standaard zetten alle verbindingen het JWT-validatieproces voort.

OnJWTBeforeValidateSignature

Dit event wordt aangeroepen nadat het token is gedecodeerd; via de Header- en Payload-parameters heb je toegang tot de inhoud van de JWT en het wordt aangeroepen voordat de signature wordt gevalideerd.

De parameter Secret is het secret dat wordt gebruikt om de signature te valideren en gebruikt de PublicKey of het Secret uit de property JWTOptions. Als dit token met een ander secret moet worden gevalideerd, kun je de nieuwe waarde in de parameter Secret zetten.

Standaard worden alle signatures gevalideerd

OnJWTAfterValidateToken

Dit event wordt aangeroepen nadat de signature is gevalideerd; de parameter Valid geeft aan of de signature correct is of niet. Is deze niet correct, dan wordt de verbinding gesloten; anders wordt deze voortgezet.

Via de meegegeven argumenten heb je toegang tot de inhoud van Header en Payload van de JWT.

Als er een fout optreedt bij het valideren van de JWT, wordt deze gemeld in het argument Error.

OnJWTException

Als er een uitzondering optreedt tijdens het decoderen en valideren van de JWT, wordt dit event aangeroepen met de inhoud van de fout.