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
UndAuthentication-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üsselAuthentication-Reference
: Zufällige Zeichenfolge, je nach Anfrage unterschiedlich, kann eine UUID sein