Exemplo de script no Jitterbit App Builder - Gerar HASH HMAC usando token privado
Este exemplo ilustra o uso de um Plugin C# com uma API REST para Autenticação. Este exemplo específico exigiu a geração de um HASH HMAC usando um token privado, uma referência única por solicitação e um timestamp epoch.
Para comunicação, um 'token privado' (e uma referência de organização) é fornecido. Mantenha este token em segredo.
Cada solicitação conterá 3 (extras) cabeçalhos:
Authentication-Reference
: (String) - Uma referência, deve ser única por solicitação. O formato não é especificado.Authentication-epoch
: (Número) - Um timestamp Unix epoch em número de segundos desde 1/1/1970.Authentication-Signature
: (String) - A combinação assinada de Referência e epoch usando o token privado.
Para validar uma solicitação, os seguintes passos são necessários:
Authentication-epoch
não deve ser mais do que 5 minutos atrás.Authentication-Reference
não deve ser reutilizado. Esta referência é uma string única, por exemplo, um GUID.- Uma string é criada com a concatenação de
Authentication-Reference
eAuthentication-epoch
. - Esta string é hashada de acordo com o digest SHA512.
- O digest é codificado em HMAC com um 'token privado' como chave (conhecida tanto pelo remetente quanto pelo receptor).
- O valor hexadecimal deste hash (minúsculas, sem espaços ou traços) deve corresponder ao
Authentication-Signature
.
Exemplo 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 necessários
Authentication-Private-Key
: A Chave Privada fornecidaAuthentication-Reference
: String Aleatória, diferente por solicitação, pode ser um UUID