Ir para o conteúdo

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 e Authentication-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 fornecida
  • Authentication-Reference: String Aleatória, diferente por solicitação, pode ser um UUID