TsgcHTTP_JWT_Client

Configure quais bibliotecas openSSL você usará ao usar o cliente JWT.

Introdução

O componente TsgcHTTP_JWT_Client permite que você codifique e assine JWT Tokens, anexado a um WebSocket Client ou HTTP/2 client, o token será enviado automaticamente como um Authorization Bearer Token Header.

Configuração

Você pode configurar os valores do JWT nas propriedades JWTOptions; há 2 propriedades principais: Header e Payload, basta definir os valores de cada propriedade obrigatória.

 

Se a Assinatura for criptografada usando uma Chave Privada (algoritmos RS e ES), defina o valor na propriedade PrivateKey do Algorithm.

Se a Assinatura for criptografada usando um Secret (algoritmos HS), defina o valor na propriedade Secret do Algorithm.

 

OpenSSL Options

Configure quais bibliotecas openSSL você usará ao usar o cliente JWT.

 

OpenSSL_Options: configuração das bibliotecas openSSL.

APIVersion: permite definir qual API OpenSSL será usada.

oslAPI_1_0: usa a API 1.0 do OpenSSL, é a mais recente suportada pelo Indy

oslAPI_1_1: usa a API 1.1 do OpenSSL, requer nossa biblioteca Indy personalizada e permite que você use bibliotecas OpenSSL 1.1.1 (com suporte a TLS 1.3).

oslAPI_3_0: usa a API 3.0 do OpenSSL, requer nossa biblioteca Indy personalizada e permite que você use bibliotecas OpenSSL 3.0.0 (com suporte a TLS 1.3).

LibPath: aqui você pode configurar onde estão localizadas as bibliotecas openSSL

oslpNone: este é o padrão, as bibliotecas openSSL devem estar na mesma pasta onde está o binário ou em um caminho conhecido.

oslpDefaultFolder: define automaticamente o caminho openSSL onde as bibliotecas devem estar localizadas para todas as personalidades do IDE.

oslpCustomFolder: se esta for a opção selecionada, defina o caminho completo na propriedade LibPathCustom.

LibPathCustom: quando LibPath = oslpCustomFolder, defina aqui o caminho completo onde estão localizadas as bibliotecas openSSL.

UnixSymLinks: habilita ou desabilita o carregamento de SymLinks em sistemas Unix (por padrão está habilitado, exceto no OSX64):

oslsSymLinksDefault: por padrão estão habilitados, exceto sob OSX64 (após o MacOS Monterey falha ao tentar carregar a biblioteca sem versão.).

oslsSymLinksLoadFirst: Carrega os SymLinks e faz isso antes de tentar carregar as bibliotecas de versão.

oslsSymLinksLoad: Carrega os SymLinks após tentar carregar as bibliotecas de versão.

oslsSymLinksDontLoad: não carrega os SymLinks.

 

Custom Headers

As propriedades Header e Payload contêm os cabeçalhos mais comuns usados para gerar um JWT, mas você pode adicionar mais cabeçalhos chamando o método AddKeyValue e passando a Key e o Value como parâmetros.

Exemplo: se você quiser adicionar um novo registro no Cabeçalho JWT com o seu nome, utilize o método a seguir

 


    Header.AddKeyValue('name', 'John Smith');

 

Após configurar as propriedades, para gerar o JWT, basta chamar o método Sign e ele retornará o valor do JWT.

 

WebSocket Client e JWT

TsgcWebSocketClient permite o uso de JWT ao conectar-se a servidores WebSocket; basta criar um novo cliente JWT e atribuí-lo à propriedade Authentication.Token.JWT .

 


    oClient := TsgcWebSocketClient.Create(nil);
    oClient.URL := 'ws://www.esegece.com:2052';
    
oJWT := TsgcHTTP_JWT_Client.Create(nil); oJWT.JWTOptions.Header.alg := jwtRS256; oJWT.JWTOptions.Payload.sub := '1234567890'; oJWT.JWTOptions.Payload.iat := 1516239022;
oClient.Authentication.Enabled := True; oClient.Authentication.URL.Enabled := False; oClient.Authentication.Token.Enabled := True; oClient.Authentication.Token.JWT := oJWT; oClient.Active := True;

 

Clientes HTTP e JWT

TsgcHTTP2Client e TsgcHTTP1Client permitem o uso de JWT ao conectar-se a servidores HTTP/2; basta criar um novo JWT client e atribuí-lo à propriedade Authentication.Token.JWT property.

 


    oHTTP := TsgcHTTP2Client.Create(nil);
    
oJWT := TsgcHTTP_JWT_Client.Create(nil); oJWT.JWTOptions.Header.alg := jwtRS256; oJWT.JWTOptions.Payload.sub := '1234567890'; oJWT.JWTOptions.Payload.iat := 1516239022;
oHTTP.Authentication.Token.JWT := oHTTP; oHTTP.Get('https://your.api.com');

 

Expiração

O Authorization Token pode ser recriado a cada vez que você envia uma requisição HTTP usando um cliente HTTP ou pode ser reutilizado várias vezes até expirar.

Exemplo: chamar o APNs da Apple utilizando Tokens requer que o token seja reutilizado por pelo menos 20 minutos e no máximo 1 hora. Utilize a propriedade RefreshTokenAfter para definir os segundos quando o token expirará, por exemplo após 30 minutos.


    RefreshTokenAfter = 60 * 40.

 

Criar Assinatura JWT

Você pode criar JWT Signatures manualmente para utilizar em aplicações que não fazem uso do protocolo WebSocket ou HTTP, ou se você estiver utilizando componentes de aplicações de terceiros e você só precisar do JWT Token.

 

Para obter a JWT Signature, basta criar uma nova instância do JWT Client e preencher as propriedades manualmente. Quando todas as propriedades estiverem definidas, chame o método Sign e ele retornará o JWT Token.

 


    oJWT := TsgcHTTP_JWT_Client.Create(nil);
    // ... header
    oJWT.JWTOptions.Header.alg := jwtHS256;
    oJWT.JWTOptions.Algorithms.HS.Secret := '79F66F1E-E998-436B-8A0A-3E5DEFA4FD9E';
    // ... payload
    oJWT.JWTOptions.Payload.jti := '9B66FB94-B761-42B1-A1AF-3C44233DBE87';
    oJWT.JWTOptions.Payload.iat := 1630925658;
    oJWT.JWTOptions.Payload.iss := '2886EC7547B7BA6A9009';
    oJWT.JWTOptions.Payload.exp := 1630933158;
    // ... custom payload values
    oJWT.JWTOptions.Payload.ClearKeyValues;
    oJWT.JWTOptions.Payload.AddKeyValue('origin', 'www.yourwebsite.com');
    oJWT.JWTOptions.Payload.AddKeyValue('ip', '69.39.46.178');
    // ... get JWT Token
    ShowMessage(oJWT.Sign);

 

Referência