A partir do sgcWebSockets 4.4.8, os tokens JWT são suportados nos componentes de servidor.
O componente TsgcHTTP_JWT_Server permite decodificar e validar tokens JWT recebidos no WebSocket Handshake ao usar o protocolo WebSocket ou como cabeçalho HTTP ao usar o protocolo HTTP.
Configuração
Você pode configurar as seguintes propriedades na propriedade JWTOptions do componente:
Se a assinatura for validada usando uma Chave Pública (algoritmos RS e ES), defina o valor na propriedade PublicKey do algoritmo.
Se a assinatura for validada usando um segredo (algoritmos HS), defina o valor na propriedade Secret do algoritmo.
Para validar tokens JWT, basta anexar uma instância de TsgcHTTP_JWT_Server à propriedade Authentication.JWT.JWT do 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;
A propriedade Checks permite habilitar algumas verificações no Payload do JWT; por padrão, verifica se as datas de emissão são válidas.
Eventos
Use os eventos a seguir para controlar o fluxo de validação do token JWT.
OnJWTBeforeRequest
O evento é chamado quando uma nova conexão HTTP / WebSocket é detectada e antes de qualquer validação ser realizada. Esta conexão pode ou não conter um token JWT.
Se não quiser processar esta conexão usando a validação JWT, basta definir o parâmetro Cancel como True (o que significa que a conexão vai ignorar as validações JWT).
Por padrão, todas as conexões continuam o processo de validação JWT.
OnJWTBeforeValidateToken
O evento é chamado quando a conexão contém um token de autorização e antes de ser validado.
Se não quiser validar este token, basta definir o parâmetro Cancel como True (o que significa que a conexão vai ignorar as validações JWT).
Por padrão, todas as conexões continuam o processo de validação JWT.
OnJWTBeforeValidateSignature
Este evento é chamado após o token ter sido decodificado, então usando os parâmetros Header e Payload você tem acesso ao conteúdo do JWT antes de a assinatura ser validada.
O parâmetro Secret é o segredo que será usado para validar a assinatura e usa o PublicKey ou o Secret da propriedade JWTOptions. Se este token precisar ser validado com outro segredo, o novo valor pode ser definido no parâmetro Secret.
Por padrão, todas as assinaturas são validadas.
OnJWTAfterValidateToken
O evento é chamado após a assinatura ter sido validada; o parâmetro Valid indica se a assinatura está correta ou não. Se não estiver correta, a conexão será encerrada; caso contrário, a conexão continuará.
Você pode acessar o conteúdo do Header e do Payload do JWT usando os argumentos fornecidos.
Se houver algum erro ao validar o JWT, ele será informado no argumento Error.
OnJWTException
Se houver alguma exceção durante o processamento da decodificação e validação do JWT, este evento será chamado com o conteúdo do erro.
