Desde sgcWebSockets 4.4.8 los tokens JWT son compatibles con los componentes servidor.
El componente TsgcHTTP_JWT_Server permite decodificar y validar tokens JWT recibidos en el WebSocket Handshake al usar el protocolo WebSocket o como cabecera HTTP al usar el protocolo HTTP.
Configuración
Puedes configurar las siguientes propiedades en la propiedad JWTOptions del componente:
Si la firma se valida usando una clave pública (algoritmos RS y ES), establece el valor en la propiedad PublicKey del algoritmo.
Si la firma se valida usando un secreto (algoritmos HS), establece el valor en la propiedad Secret del algoritmo.
Para validar tokens JWT, basta con adjuntar una instancia de TsgcHTTP_JWT_Server a la propiedad Authentication.JWT.JWT del servidor 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 propiedad Checks permite activar algunas comprobaciones en el Payload del JWT; por defecto comprueba si las fechas de emisión son válidas.
Eventos
Usa los siguientes eventos para controlar el flujo de validación del token JWT.
OnJWTBeforeRequest
El evento se llama cuando se detecta una nueva conexión HTTP / WebSocket y antes de que se haga cualquier validación. Esta conexión puede contener o no un token JWT.
Si no quieres procesar esta conexión usando la validación JWT, basta con establecer el parámetro Cancel a True (significa que esta conexión saltará las validaciones JWT).
Por defecto, todas las conexiones continúan el proceso de validación JWT.
OnJWTBeforeValidateToken
El evento se llama cuando la conexión contiene un token de autorización y antes de que se valide.
Si no quieres validar este token, basta con establecer el parámetro Cancel a True (significa que esta conexión saltará las validaciones JWT).
Por defecto, todas las conexiones continúan el proceso de validación JWT.
OnJWTBeforeValidateSignature
Este evento se llama después de que el token se haya decodificado, de modo que usando los parámetros Header y Payload tienes acceso al contenido del JWT y antes de que se valide la firma.
El parámetro Secret es el secreto que se usará para validar la firma y usa la PublicKey o Secret de la propiedad JWTOptions. Si este token debe validarse con otro secreto, el nuevo valor puede establecerse en el parámetro Secret.
Por defecto, todas las firmas se validan
OnJWTAfterValidateToken
El evento se llama después de que la firma se haya validado; el parámetro Valid muestra si la firma es correcta o no. Si no es correcta la conexión se cerrará; de lo contrario, la conexión continuará.
Puedes acceder al contenido de Header y Payload del JWT usando los argumentos proporcionados.
Si hay algún error validando el JWT, se informará en el argumento Error.
OnJWTException
Si hay alguna excepción mientras se procesa la decodificación y validación del JWT, este evento se llamará con el contenido del error.
