Skip to content

Instantly share code, notes, and snippets.

@andrewfraley
Created March 12, 2019 21:19
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andrewfraley/0229f59a11d76373f11b5d9d8c6809bc to your computer and use it in GitHub Desktop.
Save andrewfraley/0229f59a11d76373f11b5d9d8c6809bc to your computer and use it in GitHub Desktop.
Validate Github webhook signature/secret in python3
def validate_signature(payload, secret):
# Get the signature from the payload
signature_header = payload['headers']['X-Hub-Signature']
sha_name, github_signature = signature_header.split('=')
if sha_name != 'sha1':
print('ERROR: X-Hub-Signature in payload headers was not sha1=****')
return False
# Create our own signature
body = payload['body']
local_signature = hmac.new(secret.encode('utf-8'), msg=body.encode('utf-8'), digestmod=hashlib.sha1)
# See if they match
return hmac.compare_digest(local_signature.hexdigest(), github_signature)
@reconman
Copy link

reconman commented Sep 8, 2022

In Flask the following replacements are needed:

  • payload['headers'] -> payload.headers
  • payload['body'] -> payload.data
  • body.encode('utf-8') -> body

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment