Servidor JWT para Delphi

· Componentes

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.