Hướng dẫn php hash_hmac verify - xác minh php hash_hmac

Để bảo mật các thông báo thông báo Webhook kết nối của bạn, DocUsign khuyên bạn nên sử dụng tính năng HMAC. Với HMAC, thông điệp của bạn được băm bằng mật mã bằng cách sử dụng khóa riêng chỉ được biết đến với bạn và tài liệu. Nó đặt ở cấp độ tài khoản. Phím băm kết quả được bao gồm trong tiêu đề của thông báo thông báo. Khi nhận được tin nhắn, ứng dụng của bạn sẽ lặp lại hoạt động băm và so sánh kết quả với chữ ký HMAC có trong tiêu đề. & NBSP; & NBSP;

HMAC đảm bảo rằng thông điệp là từ Docusign và đã không bị thay đổi trên đường bởi bên thứ ba.

Vấn đề: Kiểm tra mã xác minh HMAC của bạn

Bất kể việc thực hiện người nghe của bạn là gì, cho dù là dịch vụ nền tảng (PAAS) như được đề xuất trong việc xây dựng các thực tiễn tốt nhất Webhook Listen, Phần 4 hoặc người nghe tùy chỉnh, bạn phải đối mặt với vấn đề liên tục từ bỏ phong bì trong khi bạn kiểm tra ứng dụng của mình.

Mã mẫu PHP bên dưới xác minh chữ ký HMAC được gửi trong tiêu đề của thông báo thông báo. Để kiểm tra mã trên máy phát triển localhost của bạn, hãy sử dụng kỹ thuật tin nhắn Webhook phát lại của người đưa thư.. To test the code on your localhost development machine, use the Postman replaying webhook messages technique.

Lưu ý rằng băm HMAC phải được xác minh trước khi thân yêu cầu được phân tích cú pháp. Cơ quan yêu cầu không được tin cậy cho đến khi HMAC băm được xác minh. & NBSP;before the request body is parsed. The request body is untrusted until the HMAC hash is verified. 

Ví dụ: Kiểm tra chữ ký HMAC bằng Vanilla PHP

getMessage() . "\n");
    }
    header("HTTP/1.1 200 OK");
}
 
function get_ds_headers()
{
    $headers = array();
    foreach ($_SERVER as $key => $value) {
        if (strpos($key, 'HTTP_') === 0) {
            $headers[str_replace(' ', '', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))))] = $value;
        }
    }
    return $headers;
}
 
function compute_hash($secret, $payload)
{
    $hexHash = hash_hmac('sha256', $payload, utf8_encode($secret));
    $base64Hash = base64_encode(hex2bin($hexHash));
    return $base64Hash;
}
 
function hash_is_valid($secret, $payload, $verify)
{
    $computed_hash = compute_hash($secret, $payload);
    eturn hash_equals($verify,$computed_hash);
}
 
function log_result($signature, $payload, $result)
{
    $result_to_log = $result == 1 ? "pass" : "fail";
    if ($result) {
        try {
            $xml = simplexml_load_string($payload);
            $envelopeId = $xml->EnvelopeStatus->EnvelopeID;
            $status = $xml->EnvelopeStatus->Status;
            $created = $xml->EnvelopeStatus->Created;
        } catch (Exception $e) {
            logger("\nException: " . $e->getMessage() . "\n");
        }
        logger("\n");
        logger("EnvelopeID: " . $envelopeId);
        logger("Signature: " . $signature);
        logger("HMAC check status: " . $result_to_log);
        logger("Envelope Status: " . $status);
        logger("Generated at: " . $created);
    } else {
        logger("\n");
        logger("HMAC check status: " . $result_to_log);
        logger("Generated at: " . date('Y-m-d H:i:s'));
    }
}

function logger($txt)
{
    $log_file = "log.txt";
    $myfile = fopen($log_file, "a") or die("Unable to open file!");
    fwrite($myfile, "\n" . $txt);
    fclose($myfile);
}
 ?>

Bản tóm tắt

Bằng cách sử dụng kỹ thuật phát lại của Postman, bạn có thể kiểm tra triển khai xác minh HMAC trong môi trường địa phương.

Tài nguyên bổ sung

  • Trung tâm phát triển DocUsign
  • @D Focusignapi trên Twitter
  • Docusign cho các nhà phát triển trên LinkedIn
  • Docusign cho các nhà phát triển trên YouTube
  • Bản tin phát triển DocUsign