Configure qué bibliotecas openSSL usará al emplear el cliente JWT.
El componente TsgcHTTP_JWT_Client le permite codificar y firmar tokens JWT, adjuntos a un cliente WebSocket o cliente HTTP/2, el token se enviará automáticamente como encabezado Authorization Bearer Token.
Puede configurar los valores JWT en las propiedades de JWTOptions; hay 2 propiedades principales: Header y Payload; simplemente establezca los valores para cada propiedad requerida.
Si la firma está cifrada usando una clave privada (algoritmos RS y ES), establezca el valor en la propiedad PrivateKey del Algorithm.
Si la Firma está cifrada mediante un Secret (algoritmos HS), establezca el valor en la propiedad Secret del Algorithm.
Configure qué bibliotecas openSSL usará al emplear el cliente JWT.
OpenSSL_Options: configuración de las bibliotecas OpenSSL.
APIVersion: permite definir qué API de OpenSSL se utilizará.
oslAPI_1_0: utiliza API 1.0 de OpenSSL, la última versión compatible con Indy
oslAPI_1_1: utiliza la API 1.1 de OpenSSL, requiere nuestra biblioteca Indy personalizada y permite usar las bibliotecas OpenSSL 1.1.1 (con soporte para TLS 1.3).
oslAPI_3_0: utiliza la API 3.0 de OpenSSL, requiere nuestra biblioteca Indy personalizada y permite usar las bibliotecas OpenSSL 3.0.0 (con soporte para TLS 1.3).
LibPath: aquí puede configurar dónde se encuentran las bibliotecas openSSL
oslpNone: es el valor predeterminado; las bibliotecas openSSL deben estar en la misma carpeta donde se encuentra el binario o en una ruta conocida.
oslpDefaultFolder: establece automáticamente la ruta de openSSL donde deben ubicarse las bibliotecas para todas las personalidades del IDE.
oslpCustomFolder: si esta es la opción seleccionada, defina la ruta completa en la propiedad LibPathCustom.
LibPathCustom: cuando LibPath = oslpCustomFolder, defina aquí la ruta completa donde se encuentran las bibliotecas openSSL.
UnixSymLinks: habilita o deshabilita la carga de SymLinks en sistemas Unix (por defecto está habilitado, excepto en OSX64):
oslsSymLinksDefault: están habilitados por defecto excepto en OSX64 (tras MacOS Monterey, falla al intentar cargar la biblioteca sin versión.).
oslsSymLinksLoadFirst: Cargar los SymLinks antes de intentar cargar las bibliotecas de versión.
oslsSymLinksLoad: Cargar SymLinks después de intentar cargar las bibliotecas de versión.
oslsSymLinksDontLoad: no carga los SymLinks.
Las propiedades Header y Payload contienen las cabeceras más comunes utilizadas para generar un JWT, pero puede añadir más cabeceras llamando al método AddKeyValue y pasando la Clave y el Valor como parámetros.
Ejemplo: si desea añadir un nuevo registro en el encabezado JWT con su nombre, use el siguiente método
Header.AddKeyValue('name', 'John Smith');
Tras configurar las propiedades, para generar el JWT, simplemente llame al método Sign y devolverá el valor del JWT.
TsgcWebSocketClient permite el uso de JWT al conectarse a servidores WebSocket; simplemente cree un nuevo cliente JWT y asígnelo a la propiedad Authentication.Token.JWT propiedad.
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 y TsgcHTTP1Client permiten el uso de JWT al conectarse a servidores HTTP/2; simplemente cree un nuevo cliente JWT y asígnelo a la propiedad Authentication.Token.JWT .
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');
El token de autorización puede recrearse cada vez que envíe una solicitud HTTP usando un cliente HTTP, o puede reutilizarse varias veces hasta que expire.
Ejemplo: al llamar a Apple APNs mediante tokens, se requiere que el token se reutilice al menos durante 20 minutos y como máximo durante 1 hora. Utilice la propiedad RefreshTokenAfter para establecer los segundos en los que el token expirará, por ejemplo, después de 30 minutos.
RefreshTokenAfter = 60 * 40.
Puede crear firmas JWT manualmente para usar en aplicaciones que no hacen uso del protocolo WebSocket o HTTP, o si está utilizando componentes de aplicaciones de terceros y solo necesita el token JWT.
Para obtener la firma JWT, simplemente cree una nueva instancia del cliente JWT y rellene las propiedades manualmente; cuando todas las propiedades estén configuradas, llame al método Sign y devolverá el token JWT.
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);