Ejemplo de scripting en Jitterbit App Builder - Generar HMAC HASH usando un token privado
Este ejemplo ilustra el uso de un Plugin en C# con una API REST para autenticación. Este ejemplo específico requiere generar un HMAC HASH utilizando un token privado, una referencia única por solicitud y un timestamp en epoch.
Para la comunicación, se proporciona un 'token privado' (y una referencia de organización). Mantén este token en secreto.
Cada solicitud contendrá 3 (extra) encabezados:
Authentication-Reference
: (Cadena) - Una referencia, debe ser única por solicitud. El formato no está especificado.Authentication-epoch
: (Número) - Un timestamp en epoch Unix en número de segundos desde el 1/1/1970.Authentication-Signature
: (Cadena) - La combinación firmada de la referencia y el epoch utilizando el token privado.
Para validar una solicitud se necesitan los siguientes pasos:
Authentication-epoch
no debe ser más de 5 minutos atrás.Authentication-Reference
no debe ser reutilizado. Esta referencia es una cadena única, por ejemplo, un GUID.- Se crea una cadena con la concatenación de
Authentication-Reference
yAuthentication-epoch
. - Esta cadena se hashea de acuerdo con el digest SHA512.
- El digest se codifica en HMAC con un 'token privado' como clave (conocida tanto por el remitente como por el receptor).
- El valor hexadecimal de este hash (en minúsculas, sin espacios ni guiones) debe coincidir con el
Authentication-Signature
.
Ejemplo de script
using System;
using System.Text;
using System.Security.Cryptography;
var epoch = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;
string privateKey = Request.Headers["Authentication-Private-Key"];
string reference = Request.Headers["Authentication-Reference"] + epoch;
HMAC hMAC=new HMACSHA512(Encoding.UTF8.GetBytes(privateKey));
byte[] tokens = hMAC.ComputeHash(Encoding.UTF8.GetBytes(reference));
string authToken = BitConverter.ToString(tokens).Replace( "-" , "" ).
ToLower();
Request.Headers["Authentication-Signature"] = authToken;
Request.Headers["Authentication-Epoch"] = epoch.ToString();
Request.Headers.Remove("Authentication-Private-Key");
Parámetros de endpoint requeridos
Authentication-Private-Key
: La clave privada proporcionadaAuthentication-Reference
: Cadena aleatoria, diferente por solicitud, puede ser un UUID