Configure quais bibliotecas openSSL você usará ao usar o cliente JWT.
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.
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.
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.
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.
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;
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');
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.
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);