KI fragen
Deutsch DE
Zu Watbot

Signaturen und Base64

Externe Dienste signieren ihre Anfragen oft oder erwarten eine Signatur von Ihnen und übergeben Daten in Base64. Dafür gibt es im Code drei Funktionen.

hash_hmac

hash_hmac(algo, text, key, format)

Berechnet eine HMAC-Signatur eines Textes mit einem geheimen Schlüssel.

Parameter Typ Was übergeben wird
algo Zeichenkette Algorithmus: 'md5', 'sha1', 'sha256', 'sha512' oder 'md4'
text Zeichenkette Was signiert wird
key Zeichenkette Geheimer Schlüssel
format Zeichenkette, optional 'base64' — Ergebnis in Base64. Ohne Parameter — hexadezimal in Kleinbuchstaben

Liefert die Signatur als Zeichenkette. Ist algo, text oder key leer, liefert die Funktion undefined.

Achtung

Übergeben Sie nur Algorithmen aus der Liste. Bei einem anderen Namen, etwa 'sha3', wirft die Funktion den Fehler TypeError: hash_hmac: unsupported algorithm "sha3"…. Fangen Sie ihn nicht mit try...catch ab, endet der Code mit diesem Fehler.

Signatur einer eingehenden Anfrage prüfen: Der Dienst des Ladens sendet sie im Header X-Signature, der geheime Schlüssel liegt in einer globalen Variablen des Bots.

var secret = getGlobalVariable('shop_schluessel');
var expected = hash_hmac('sha256', request.body, secret);

if (expected !== request.headers['x-signature']) {
    throw new Error('Ungültige Signatur');
}

if (setContactById(request.data.contact_id)) {
    setContactVariable('bestellstatus', request.data.status);
}

Stimmt die Signatur nicht, hält der Code an, und der Block beantwortet die Anfrage mit dem Code 422.

base64_encode

base64_encode(text)

Kodiert Text in Base64.

Parameter Typ Was übergeben wird
text Zeichenkette Was kodiert wird. Umlaute und andere Sonderzeichen werden als UTF-8 kodiert

Liefert eine Zeichenkette in Base64.

var auth = 'Basic ' + base64_encode('flowers:secret-password');

base64_decode

base64_decode(text)

Dekodiert eine Zeichenkette aus Base64.

Parameter Typ Was übergeben wird
text Zeichenkette Zeichenkette in Standard-Base64

Liefert den dekodierten Text oder undefined, wenn die Zeichenkette kein Base64 ist.

var payload = base64_decode(request.data.payload);
var order = payload ? JSON.parse(payload) : null;