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 FehlerTypeError: hash_hmac: unsupported algorithm "sha3"…. Fangen Sie ihn nicht mittry...catchab, 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;