<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Introducing version 3 of Webhook signatures in Developer Announcements</title>
    <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/521239#M167</link>
    <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/370"&gt;@zwolfson&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;We're just now experiencing an issue with signature verifications for v2 requests starting 10:15am Pacific time today November 4th. All signature validation simply fails, with secrets that used to work until that point.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It looks like HubSpot's public API libraries (like this ruby client:&amp;nbsp;&lt;A href="https://github.com/HubSpot/hubspot-api-ruby/blob/master/lib/hubspot/helpers/webhooks_helper.rb#L19" target="_blank" rel="noopener"&gt;https://github.com/HubSpot/hubspot-api-ruby/blob/master/lib/hubspot/helpers/webhooks_helper.rb#L19&lt;/A&gt;) are not ready for this rollout, are they?&lt;/P&gt;</description>
    <pubDate>Thu, 04 Nov 2021 19:04:54 GMT</pubDate>
    <dc:creator>amit-hs</dc:creator>
    <dc:date>2021-11-04T19:04:54Z</dc:date>
    <item>
      <title>Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/515477#M158</link>
      <description>&lt;P&gt;&lt;SPAN style="font-weight: 400;"&gt;In order to help protect our partners and customers, HubSpot signs outgoing requests (such as those for webhooks or CRM cards) so that you can verify that the request did actually come from HubSpot. Following the latest security best-practices, we are adding two new headers to outgoing HubSpot requests to OAuth Apps - X-HubSpot-Signature-v3 and X-HubSpot-Request-Timestamp. Prior versions of the X-HubSpot-Signature header will continue to be included for backward compatibility. OAuth Apps can use the request signature to verify whether received requests are actually from HubSpot.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN style="font-weight: 400;"&gt;What’s happening&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="font-weight: 400;"&gt;We are adding two new headers to outgoing requests: X-HubSpot-Signature-v3, X-HubSpot-Request-Timestamp.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="font-weight: 400;"&gt;To verify the signature, developers will need to perform the following steps:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN style="font-weight: 400;"&gt;Reject the request if the timestamp is older than 5 minutes.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN style="font-weight: 400;"&gt;Create a utf-8 encoded string that concatenates together the following: requestMethod + requestUri + requestBody + timestamp. The timestamp is provided by the new X-HubSpot-Request-Timestamp header.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN style="font-weight: 400;"&gt;Create an HMAC SHA-256 hash of the resulting string using the application secret as the secret for the HMAC SHA-256 function.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN style="font-weight: 400;"&gt;Base64 encode the result of the HMAC function.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN style="font-weight: 400;"&gt;Compare the hash value to the signature. If they're equal then this request has been verified as originating from Hubspot. We recommend using constant-time string comparison to guard against timing attacks.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="font-weight: 400;"&gt;These new headers are available now.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="font-weight: 400;"&gt;If you have any questions or comments, please join the discussion here.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 25 Oct 2021 16:47:29 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/515477#M158</guid>
      <dc:creator>zwolfson</dc:creator>
      <dc:date>2021-10-25T16:47:29Z</dc:date>
    </item>
    <item>
      <title>Re: Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/521239#M167</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/370"&gt;@zwolfson&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;We're just now experiencing an issue with signature verifications for v2 requests starting 10:15am Pacific time today November 4th. All signature validation simply fails, with secrets that used to work until that point.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It looks like HubSpot's public API libraries (like this ruby client:&amp;nbsp;&lt;A href="https://github.com/HubSpot/hubspot-api-ruby/blob/master/lib/hubspot/helpers/webhooks_helper.rb#L19" target="_blank" rel="noopener"&gt;https://github.com/HubSpot/hubspot-api-ruby/blob/master/lib/hubspot/helpers/webhooks_helper.rb#L19&lt;/A&gt;) are not ready for this rollout, are they?&lt;/P&gt;</description>
      <pubDate>Thu, 04 Nov 2021 19:04:54 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/521239#M167</guid>
      <dc:creator>amit-hs</dc:creator>
      <dc:date>2021-11-04T19:04:54Z</dc:date>
    </item>
    <item>
      <title>Re: Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/521241#M168</link>
      <description>&lt;P&gt;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/370"&gt;@zwolfson&lt;/a&gt;&amp;nbsp;despite not opting into the v3 signature validation described in your post, our signature validation suddenly broke at 10:15am PT this morning. Your statement around ensuring backwards compatibility does not seem to be accurate in our experience.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;Could you please confirm whether this rollout is progressing as intended? For reference, there seem to be other users experiencing the same problem:&amp;nbsp;&lt;A href="https://community.hubspot.com/t5/APIs-Integrations/Incorrect-X-Hubspot-Signature-in-CRM-extension-s-requests/td-p/520140" target="_blank"&gt;https://community.hubspot.com/t5/APIs-Integrations/Incorrect-X-Hubspot-Signature-in-CRM-extension-s-requests/td-p/520140&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;If it is indeed true that this was rolled out without actual backwards compatibility, I would consider this to be a major breach of trust.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;Thank you&lt;/P&gt;</description>
      <pubDate>Thu, 04 Nov 2021 19:05:10 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/521241#M168</guid>
      <dc:creator>PHuston</dc:creator>
      <dc:date>2021-11-04T19:05:10Z</dc:date>
    </item>
    <item>
      <title>Re: Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/521275#M169</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/169799"&gt;@PHuston&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/159073"&gt;@amit-hs&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;There was an &lt;A href="https://status.hubspot.com/incidents/t9br2j17f3g3" target="_blank"&gt;issue&lt;/A&gt; unrelated to this addition that affected the v2 version of webhook signatures. That issue should now be resolved.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Sorry for the errors caused by this issue.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Let us know if you have any other questions.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks,&lt;BR /&gt;Zack&lt;/P&gt;</description>
      <pubDate>Thu, 04 Nov 2021 19:52:37 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/521275#M169</guid>
      <dc:creator>zwolfson</dc:creator>
      <dc:date>2021-11-04T19:52:37Z</dc:date>
    </item>
    <item>
      <title>Re: Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/521765#M170</link>
      <description>&lt;P&gt;Thanks for the clarity Zack!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 05 Nov 2021 16:53:53 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/521765#M170</guid>
      <dc:creator>amit-hs</dc:creator>
      <dc:date>2021-11-05T16:53:53Z</dc:date>
    </item>
    <item>
      <title>Re: Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/544451#M184</link>
      <description>&lt;P&gt;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/370"&gt;@zwolfson&lt;/a&gt;&amp;nbsp;Webhook Form Submisssion signature verification fails, We are using rawBody for generate source string&lt;/P&gt;&lt;P&gt;Signature Version: v2&lt;/P&gt;&lt;LI-CODE lang="javascript"&gt;import * as crypto from 'crypto';

const signature = req.headers['x-hubspot-signature'];
const body = req['rawBody'];
const method = 'POST';
const secret = 'XXXX'; // Client secret
const url = this.configService.get&amp;lt;string&amp;gt;('APP_URL') + req.originalUrl;
const sourceStr = secret + method + url + body;
const hash = crypto.createHash('sha256').update(sourceStr).digest('hex');

console.log(`${signature} === ${hash}`);&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This was working when payload is small size of json, Fails on Form submission webhook. The form submission webhook payload its too large. Also it's very strange to debug this issue.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 18 Dec 2021 05:13:56 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/544451#M184</guid>
      <dc:creator>ajchennai</dc:creator>
      <dc:date>2021-12-18T05:13:56Z</dc:date>
    </item>
    <item>
      <title>Re: Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/548303#M187</link>
      <description>&lt;P&gt;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/370"&gt;@zwolfson&lt;/a&gt; regardless of not selecting into the v3 signature approval depicted in your &lt;A href="https://laquintahouston.com/about-us/" target="_blank" rel="noopener"&gt;&lt;FONT color="#000000"&gt;post&lt;/FONT&gt;&lt;/A&gt;, our unmistakable approval out of nowhere broke at 10:15am PT today. Your articulation around guaranteeing in reverse similarity doesn't appear to be precise as far as we can tell.&lt;/P&gt;&lt;P&gt;Could you kindly affirm whether this rollout is advancing as planned? For reference, there appear to be different clients encountering a similar issue: &lt;A href="https://community.hubspot.com/t5/APIs-Integrations/Incorrect-X-Hubspot-Signature-in-CRM-augmentation" target="_blank"&gt;https://community.hubspot.com/t5/APIs-Integrations/Incorrect-X-Hubspot-Signature-in-CRM-augmentation&lt;/A&gt; s-...&lt;/P&gt;&lt;P&gt;Assuming it is for sure a fact that this was carried out without real in reverse similarity, I would believe this to be a significant break of trust.&lt;/P&gt;&lt;P&gt;Much obliged to you&lt;/P&gt;</description>
      <pubDate>Thu, 30 Dec 2021 11:46:38 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/548303#M187</guid>
      <dc:creator>JJolly37</dc:creator>
      <dc:date>2021-12-30T11:46:38Z</dc:date>
    </item>
    <item>
      <title>Re: Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/563943#M192</link>
      <description>&lt;P&gt;Hi, &lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/370"&gt;@zwolfson&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm still trying to wrap my head around on how to concatinate the string correctly. I wish there's an example in the doc for us to confirm that our code is correct.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;By any chance, does anyone has a php working sample? I kinda have this, but I can never generate the same signature as the header. Not sure what i'm doing wrong. Thought V3 is suppose to be more securied, but so hard to get it right.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="php"&gt;// Create a utf-8 encoded string that concatenates together the following: requestMethod + requestUri + requestBody + timestamp. The timestamp is provided by the new X-HubSpot-Request-Timestamp header.
$request_method = $_SERVER['REQUEST_METHOD'];
$request_uri = $_SERVER['SCRIPT_URI'];
$request_body = file_get_contents('php://input');
$request_timestamp = $_SERVER['HTTP_X_HUBSPOT_REQUEST_TIMESTAMP'];
$string = utf8_encode("{$request_method}{$request_uri}{$request_body}{$request_timestamp}");

// Create an HMAC SHA-256 hash of the resulting string using the application secret as the secret for the HMAC SHA-256 function.
$hash = hash_hmac('sha256', $string, HUBSPOT_APP_SECRET);

// Base64 encode the result of the HMAC function.
$encoded = base64_encode($hash);

// Compare the hash value to the signature. If they're equal then this request has been verified as originating from Hubspot. We recommend using constant-time string comparison to guard against timing attacks.
var_dump(hash_equals($_SERVER['HTTP_X_HUBSPOT_SIGNATURE_V3'], $encoded));&lt;/LI-CODE&gt;&lt;P&gt;'&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 27 Jan 2022 08:15:41 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/563943#M192</guid>
      <dc:creator>AChen4</dc:creator>
      <dc:date>2022-01-27T08:15:41Z</dc:date>
    </item>
    <item>
      <title>Re: Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/581205#M208</link>
      <description>&lt;P&gt;I am working on X-Hubspot-Signature-V3 validation using below c# code but i am not getting correct hash value.&amp;nbsp; can anyone suggest working c# code sample?&amp;nbsp;&lt;/P&gt;&lt;P&gt;HttpContext.Request.Headers.TryGetValue("X-Hubspot-Request-Timestamp", out StringValues timeStamp );&lt;BR /&gt;HttpContext.Request.Headers.TryGetValue("X-Hubspot-Signature-V3", out StringValues v3);&lt;BR /&gt;var validRequest = false;&lt;BR /&gt;using (var stream = new StreamReader(HttpContext.Request.Body))&lt;BR /&gt;{&lt;BR /&gt;var body = await stream.ReadToEndAsync();&lt;BR /&gt;var method = HttpContext.Request.Method;&lt;BR /&gt;var requestUri = $"{Request.Scheme}://{Request.Host.Value}/";&lt;BR /&gt;HMACSHA256 hashObject = new HMACSHA256(Encoding.UTF8.GetBytes("screat"));&lt;BR /&gt;var data = string.Concat(method, requestUri, body, timeStamp);&lt;BR /&gt;byte[] utf = Encoding.UTF8.GetBytes(data);&lt;BR /&gt;var signatureV3 = hashObject.ComputeHash(Encoding.UTF8.GetBytes(data));&lt;BR /&gt;var encodedSignature = Convert.ToBase64String(signatureV3);&lt;BR /&gt;if (v3.Equals(encodedSignature))&lt;BR /&gt;{&lt;BR /&gt;validRequest = true;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;}&lt;/P&gt;</description>
      <pubDate>Tue, 22 Feb 2022 18:08:19 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/581205#M208</guid>
      <dc:creator>RSheladiya</dc:creator>
      <dc:date>2022-02-22T18:08:19Z</dc:date>
    </item>
    <item>
      <title>Re: Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/587661#M210</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/319282"&gt;@AChen4&lt;/a&gt;&amp;nbsp;&amp;amp;&amp;nbsp;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/336446"&gt;@RSheladiya&lt;/a&gt;&amp;nbsp; .... we're you able to eventually get past the probem and successfully create a working&amp;nbsp; payload signature? We're considering a move to v3, and just want to ensure that the path is worthwhile. Do you have working pseudo-solutions to share? Thanks.&lt;/P&gt;</description>
      <pubDate>Thu, 03 Mar 2022 12:47:01 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/587661#M210</guid>
      <dc:creator>amit-hs</dc:creator>
      <dc:date>2022-03-03T12:47:01Z</dc:date>
    </item>
    <item>
      <title>Re: Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/587843#M211</link>
      <description>&lt;P&gt;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/159073"&gt;@amit-hs&lt;/a&gt;&amp;nbsp;no, I'm still using v2. I can never get v3 to work.&lt;/P&gt;</description>
      <pubDate>Thu, 03 Mar 2022 16:26:28 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/587843#M211</guid>
      <dc:creator>AChen4</dc:creator>
      <dc:date>2022-03-03T16:26:28Z</dc:date>
    </item>
    <item>
      <title>Re: Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/588702#M212</link>
      <description>&lt;P&gt;nevermind, I have figure it out.&amp;nbsp;&lt;/P&gt;&lt;P&gt;it requies to user full uri&lt;/P&gt;</description>
      <pubDate>Fri, 04 Mar 2022 20:28:00 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/588702#M212</guid>
      <dc:creator>RSheladiya</dc:creator>
      <dc:date>2022-03-04T20:28:00Z</dc:date>
    </item>
    <item>
      <title>Re: Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/589281#M213</link>
      <description>&lt;P&gt;Nice! Do you mean this line should look different?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;var requestUri = $"{Request.Scheme}://{Request.Host.Value}/";&lt;/SPAN&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Just so this is more helpful to other people coming here for a solution, could you post what the actual working code looks like?&lt;/P&gt;</description>
      <pubDate>Mon, 07 Mar 2022 00:12:14 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/589281#M213</guid>
      <dc:creator>amit-hs</dc:creator>
      <dc:date>2022-03-07T00:12:14Z</dc:date>
    </item>
    <item>
      <title>Re: Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/597206#M217</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/370"&gt;@zwolfson&lt;/a&gt;, I don't find any way to specify the&amp;nbsp;&lt;SPAN&gt;Signature Version(like v3), and now I find the webhook from hubspot is just v1, do I need to implement the three version verify method according to the version in&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;X-HubSpot-Signature-Version&lt;/SPAN&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;looking forward to your reply, thx.&lt;/P&gt;</description>
      <pubDate>Fri, 18 Mar 2022 03:30:58 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/597206#M217</guid>
      <dc:creator>liuyun</dc:creator>
      <dc:date>2022-03-18T03:30:58Z</dc:date>
    </item>
    <item>
      <title>Re: Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/601952#M223</link>
      <description>&lt;P&gt;I'm experiencing issues validating the request. Here's my code, what am I getting wrong here? Please note the _fullWebHookUrl is the entire path (b692-98-231-78-177.ngrok.io/api/v1/HubSpotWebhooks/PostNotification)&lt;BR /&gt;&lt;BR /&gt;Thanks for the help, I'm pretty well frustrated at this point.&lt;/P&gt;&lt;P&gt;private bool ValidateRequest(HttpRequest httpRequest, dynamic requestBody)&lt;BR /&gt;{&lt;BR /&gt;httpRequest.Headers.TryGetValue("X-Hubspot-Request-Timestamp", out var timeStamp);&lt;BR /&gt;httpRequest.Headers.TryGetValue("X-Hubspot-Signature-V3", out var v3);&lt;/P&gt;&lt;P&gt;HMACSHA256 hashObject = new(Encoding.UTF8.GetBytes(_appSecret));&lt;/P&gt;&lt;P&gt;var data = string.Concat(httpRequest.Method, _fullWebhookUrl, requestBody, timeStamp);&lt;BR /&gt;byte[] utf = Encoding.UTF8.GetBytes(data);&lt;/P&gt;&lt;P&gt;var signatureV3 = hashObject.ComputeHash(utf);&lt;BR /&gt;var encodedSignature = Convert.ToBase64String(signatureV3);&lt;/P&gt;&lt;P&gt;bool validRequest = v3.Equals(encodedSignature);&lt;BR /&gt;return validRequest;&lt;BR /&gt;}&lt;/P&gt;</description>
      <pubDate>Fri, 25 Mar 2022 21:47:15 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/601952#M223</guid>
      <dc:creator>GPhillips9</dc:creator>
      <dc:date>2022-03-25T21:47:15Z</dc:date>
    </item>
    <item>
      <title>Re: Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/604417#M225</link>
      <description>&lt;P&gt;Make sure you include the protocol in your _fullWebHookUrl (e.g., https:// or http://)&lt;/P&gt;</description>
      <pubDate>Wed, 30 Mar 2022 16:00:16 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/604417#M225</guid>
      <dc:creator>mynameiskyleok</dc:creator>
      <dc:date>2022-03-30T16:00:16Z</dc:date>
    </item>
    <item>
      <title>Re: Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/604479#M226</link>
      <description>&lt;P&gt;Yes good point I do include it and still no dice...do you have it working?&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="GPhillips9_0-1648659030507.png" style="width: 400px;"&gt;&lt;img src="https://community.hubspot.com/t5/image/serverpage/image-id/62827i17F0E5C1F06C0A8B/image-size/medium?v=v2&amp;amp;px=400" role="button" title="GPhillips9_0-1648659030507.png" alt="GPhillips9_0-1648659030507.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 30 Mar 2022 16:50:08 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/604479#M226</guid>
      <dc:creator>GPhillips9</dc:creator>
      <dc:date>2022-03-30T16:50:08Z</dc:date>
    </item>
    <item>
      <title>Re: Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/604551#M227</link>
      <description>&lt;P&gt;Sorry, that was the first thing that stood out to me. I'm not familiar with .NET but your logic looks correct to me. I have it working in Node.js which I can clean up and post as an example here if that'd be helpful.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The string I'm concatening and hashing for a CRM card looks like:&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;GEThttps://XXX-XXX-XXX-XXX.ngrok.io/path/to/endpoint?userId=XXXXXXXX&amp;amp;userEmail=emailmaria@hubspot.com&amp;amp;associatedObjectId=1&amp;amp;associatedObjectType=CONTACT&amp;amp;portalId=XXXXXXXX1648664076585&lt;/LI-CODE&gt;&lt;P&gt;Keep in mind, yours will look a little different depending on what's in the request body for your webhook POST and if any query string parameters are being passed. I have no request body for a CRM card GET request:&lt;/P&gt;&lt;LI-CODE lang="css"&gt;portalId=XXXXXXXX&amp;lt;the request body would go here if there was one&amp;gt;1648664076585&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 30 Mar 2022 18:37:38 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/604551#M227</guid>
      <dc:creator>mynameiskyleok</dc:creator>
      <dc:date>2022-03-30T18:37:38Z</dc:date>
    </item>
    <item>
      <title>Re: Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/623819#M240</link>
      <description>&lt;P&gt;Could you share your working v2 signature validation code?&lt;/P&gt;</description>
      <pubDate>Thu, 28 Apr 2022 15:20:47 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/623819#M240</guid>
      <dc:creator>DLiebner</dc:creator>
      <dc:date>2022-04-28T15:20:47Z</dc:date>
    </item>
    <item>
      <title>Re: Introducing version 3 of Webhook signatures</title>
      <link>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/624190#M241</link>
      <description>&lt;P&gt;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/376158"&gt;@DLiebner&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It'd be something like this&lt;/P&gt;&lt;LI-CODE lang="php"&gt;&amp;lt;?php
    $request_body = file_get_contents('php://input');
    $hash = hash('sha256', HUBSPOT_APP_SECRET . $request_body);
    $valid = hash_equals($_SERVER['HUBSPOT_SIGNATURE'], $hash);&lt;/LI-CODE&gt;</description>
      <pubDate>Fri, 29 Apr 2022 00:25:53 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Developer-Announcements/Introducing-version-3-of-Webhook-signatures/m-p/624190#M241</guid>
      <dc:creator>AChen4</dc:creator>
      <dc:date>2022-04-29T00:25:53Z</dc:date>
    </item>
  </channel>
</rss>

