Ab sgcWebSockets 4.4.8 werden JWT Tokens in den Server-Komponenten unterstützt.
Mit der Komponente TsgcHTTP_JWT_Server kannst du JWT-Tokens dekodieren und validieren, die im WebSocket-Handshake beim WebSocket-Protokoll oder als HTTP-Header beim HTTP-Protokoll empfangen werden.
Konfiguration
Du kannst die folgenden Eigenschaften in der JWTOptions-Eigenschaft der Komponente konfigurieren:
Wenn die Signatur mit einem öffentlichen Schlüssel validiert wird (RS- und ES-Algorithmen), trage den Wert in die PublicKey-Eigenschaft des Algorithmus ein.
Wenn die Signatur mit einem Secret validiert wird (HS-Algorithmen), trage den Wert in die Secret-Eigenschaft des Algorithmus ein.
Um JWT-Tokens zu validieren, weise einfach eine TsgcHTTP_JWT_Server-Instanz der Authentication.JWT.JWT-Eigenschaft des WebSocket/HTTP-Servers zu.
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;
Mit der Eigenschaft Checks kannst du einige Prüfungen im Payload des JWT aktivieren; standardmäßig wird geprüft, ob die Ausstellungsdaten gültig sind.
Ereignisse
Verwende die folgenden Ereignisse, um den Ablauf der JWT-Validierung zu steuern.
OnJWTBeforeRequest
Das Ereignis wird ausgelöst, wenn eine neue HTTP-/WebSocket-Verbindung erkannt wird und bevor irgendeine Validierung durchgeführt wird. Diese Verbindung kann ein JWT-Token enthalten oder auch nicht.
Wenn du diese Verbindung nicht mit JWT-Validierung verarbeiten möchtest, setze einfach den Parameter Cancel auf True (bedeutet, dass diese Verbindung die JWT-Validierungen umgeht).
Standardmäßig durchlaufen alle Verbindungen den JWT-Validierungsprozess.
OnJWTBeforeValidateToken
Das Ereignis wird ausgelöst, wenn die Verbindung ein Authorization-Token enthält und bevor es validiert wird.
Wenn du dieses Token nicht validieren möchtest, setze einfach den Parameter Cancel auf True (bedeutet, dass diese Verbindung die JWT-Validierungen umgeht).
Standardmäßig durchlaufen alle Verbindungen den JWT-Validierungsprozess.
OnJWTBeforeValidateSignature
Dieses Ereignis wird aufgerufen, nachdem das Token dekodiert wurde. Über die Parameter Header und Payload hast du Zugriff auf den Inhalt des JWT, bevor die Signatur validiert wird.
Der Parameter Secret ist das Secret, das zur Validierung der Signatur verwendet wird, und nutzt PublicKey oder Secret aus der JWTOptions-Eigenschaft. Wenn dieses Token mit einem anderen Secret validiert werden soll, kann der neue Wert dem Parameter Secret übergeben werden.
Standardmäßig werden alle Signaturen validiert.
OnJWTAfterValidateToken
Das Ereignis wird aufgerufen, nachdem die Signatur validiert wurde; der Parameter Valid zeigt an, ob die Signatur korrekt ist oder nicht. Ist sie nicht korrekt, wird die Verbindung geschlossen, andernfalls wird sie fortgesetzt.
Du kannst über die bereitgestellten Argumente auf den Inhalt von Header und Payload des JWT zugreifen.
Wenn ein Fehler bei der Validierung des JWT auftritt, wird er im Argument Error mitgeteilt.
OnJWTException
Tritt bei der Dekodierung und Validierung des JWT eine Ausnahme auf, wird dieses Ereignis mit dem Inhalt des Fehlers aufgerufen.
