I'm trying to verify a webhook from bamboohr. the documentation is here https://documentation.bamboohr.com/docs/webhooks
and after unpacking the headers I see this:
- X-BambooHR-Signature: 362cb0eff0193af8d3f939349f84014e5c70bba4cfc105682b45ecd305db01ff
- X-BambooHR-Timestamp: 1652747163
Here is my code, from an azure function triggered by the webhook. The testOutput is not whats in the ‘X-BambooHR-Signature’ header:
            string data;
            using (var reader = new StreamReader(req.Body))
            {
                 data = await reader.ReadToEndAsync();
            }
            string privateKey = "<gotten from bamboohr webhookconfig>";
            if (req.Headers.Keys.Contains("X-BambooHR-Signature") && req.Headers.Keys.Contains("X-BambooHR-Timestamp"))
            {
                string timestamp = req.Headers["X-BambooHR-Timestamp"];
                string signature = req.Headers["X-BambooHR-Signature"];
                byte[] privateKeyBytes = Encoding.UTF8.GetBytes(privateKey);
                byte[] combinedBytes = Encoding.UTF8.GetBytes(data + timestamp);
                HMACSHA256 hmac = new HMACSHA256(privateKeyBytes);
                byte[] testOutputBytes = hmac.ComputeHash(combinedBytes);
                string testOutput = Convert.ToBase64String(testOutputBytes);
                log.LogInformation("testOutput is: " + testOutput);  //----NOT EQUAL TO signature.
            }
Any idea what I might be doing wrong? the testUutput is something like 'llBdZd2IfVdrJBlkGFFNG2dszDxpgJlJ4vQqTATJsYU=' which as you can see isnt even close.
 
    