Saltar al contenido

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 y Authentication-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 proporcionada
  • Authentication-Reference: Cadena aleatoria, diferente por solicitud, puede ser un UUID