Verificarea semnăturii pentru Webhook
Această secțiune oferă exemple de implementare pentru verificarea autenticității cererilor primite, folosind o cheie de semnătură. Acest mecanism contribuie la securitatea integrării (ex. webhook-uri), asigurând că datele nu au fost modificate.
Semnătura este, de obicei, inclusă în header-ul cererii și trebuie validată prin calcularea unui hash HMAC cu cheia secretă partajată.
.NET
using System.Security.Cryptography;
using System.Text;
using System.Text.Json.Nodes;
var jsonMessage = "[CALLBACK MESSAGE]";
var signatureKey = "[YOUR SIGNATURE KEY]";
var jsonNode = JsonNode.Parse(jsonMessage);
var resultElement = jsonNode!["result"]!;
var keys = new Dictionary<string, string>();
foreach (var property in (JsonObject)resultElement)
{
var valueNode = property.Value;
if (valueNode is null)
continue;
string valueStr = property.Key is "amount" or "commission"
? valueNode.GetValue<decimal>().ToString("F2")
: valueNode.ToString();
if (!string.IsNullOrWhiteSpace(valueStr))
keys.Add(property.Key, valueStr);
}
var orderedKeys = keys.OrderBy(kv => kv.Key, StringComparer.OrdinalIgnoreCase).ToArray();
var additionalString =
string.Join(":", orderedKeys.Select(kv => kv.Value));
var hash = SHA256.HashData(Encoding.UTF8.GetBytes($"{additionalString}:{signatureKey}"));
var result = Convert.ToBase64String(hash);
if (result == jsonNode["signature"]!.ToString())
Console.WriteLine("Signature is valid");
else
Console.WriteLine("INVALID SIGNATURE!");.PHP
node.js
Last updated