💬

チャットワークのWebhookの署名検証をPythonで実装してみた

2021/04/19に公開

チャットワークの公式ブログ"Chatwork Creator's Note"にある記事『チャットワークのWebhookの署名検証を各言語で実装してみた』に、なぜかPythonが含まれていないので、公式と同様の形式でコード例を紹介します(動作検証はPython 3.6.9でしています)。

import base64
import hashlib
import hmac

token = 'A9ne+ygvdV0IZBaPFV2zC1e5Bk+IsI14BPwieRoBQNU='
request_signature = 'G7Gtrh5Ee6d8erOVXhWPtUrkNJqqIT5vwLU50KhyLQk='
request_body = '{"webhook_setting_id":"246","webhook_event_type":"message_created","webhook_event_time":1511238729,"webhook_event":{"message_id":"984676321621704704","room_id":36818150,"account_id":1484814,"body":"test","send_time":1511238729,"update_time":0}}'
    
digest = hmac.new(base64.b64decode(token), request_body.encode('utf-8'), hashlib.sha256).hexdigest()
expected_signature = base64.b64encode(bytes.fromhex(digest)).decode('utf-8')
print(request_signature == expected_signature)

Discussion