Zum Inhalt springen

Skriptbeispiel im Jitterbit App Builder - HMAC HASH mit privatem Token generieren

Dieses Beispiel veranschaulicht die Verwendung eines C# Plugins mit einer REST API zur Authentifizierung. Dieses spezifische Beispiel erforderte die Generierung eines HMAC HASH unter Verwendung eines privaten Tokens, einer einzigartigen Referenz pro Anfrage und einem Epoch-Zeitstempel.

Für die Kommunikation wird ein 'privates Token' (und eine Organisationsreferenz) bereitgestellt. Halten Sie dieses Token geheim.

Jede Anfrage enthält 3 (zusätzliche) Header:

  • Authentication-Reference: (String) - Eine Referenz, die pro Anfrage einzigartig sein muss. Das Format ist nicht spezifiziert.
  • Authentication-epoch: (Zahl) - Ein Unix-Epoch-Zeitstempel in Sekunden seit dem 1.1.1970.
  • Authentication-Signature: (String) - Die signierte Kombination aus Referenz und Epoch unter Verwendung des privaten Tokens.

Um eine Anfrage zu validieren, sind die folgenden Schritte erforderlich:

  • Authentication-epoch darf nicht mehr als 5 Minuten zurückliegen.
  • Authentication-Reference darf nicht wiederverwendet werden. Diese Referenz ist ein einzigartiger String, zum Beispiel eine GUID.
  • Ein String wird erstellt, indem Authentication-Reference und Authentication-epoch verkettet werden.
  • Dieser String wird gemäß dem SHA512-Digest gehasht.
  • Der Digest wird HMAC-kodiert mit einem 'privaten Token' als Schlüssel (bekannt sowohl dem Sender als auch dem Empfänger).
  • Der hexadezimale Wert dieses Hashs (kleingeschrieben, ohne Leerzeichen oder Bindestriche) sollte mit der Authentication-Signature übereinstimmen.

Skriptbeispiel

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");

Erforderliche Endpunktparameter

  • Authentication-Private-Key: Der bereitgestellte private Schlüssel
  • Authentication-Reference: Zufälliger String, der pro Anfrage unterschiedlich ist, kann eine UUID sein