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. Für dieses spezielle Beispiel musste ein HMAC-HASH mit einem privaten Token, einer eindeutigen Referenz pro Anforderung und einem Epochen-Zeitstempel generiert werden.

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: (Zeichenfolge) - Eine Referenz, muss pro Anfrage eindeutig sein. Das Format ist nicht angegeben.
  • Authentication-epoch: (Zahl) - Ein Unix-Epochen-Zeitstempel in Sekunden ab dem 1.1.1970.
  • Authentication-Signature: (String) - Die signierte Kombination aus Referenz und Epoche unter Verwendung des privaten Tokens.

Zur Validierung einer Anfrage sind folgende Schritte erforderlich:

  • Authentication-epoch sollte nicht länger als 5 Minuten her sein.
  • Authentication-Reference sollte nicht wiederverwendet werden. Diese Referenz ist eine eindeutige Zeichenfolge, beispielsweise eine GUID.
  • Eine Zeichenfolge wird durch die Verkettung von Authentication-Reference Und Authentication-epoch.
  • Diese Zeichenfolge wird gemäß dem SHA512-Digest gehasht.
  • Der Digest ist HMAC-codiert mit einem „privaten Token“ als Schlüssel (dem Absender und Empfänger bekannt).
  • Der Hex-Wert dieses Hashs (Kleinbuchstaben, keine Leerzeichen oder Bindestriche) sollte mit dem übereinstimmen Authentication-Signature.

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

Erforderliche Endpoint

  • Authentication-Private-Key: Der angegebene private Schlüssel
  • Authentication-Reference: Zufällige Zeichenfolge, je nach Anfrage unterschiedlich, kann eine UUID sein