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
undAuthentication-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üsselAuthentication-Reference
: Zufälliger String, der pro Anfrage unterschiedlich ist, kann eine UUID sein