我正在嘗試從 github 驗證我的 webhook 的簽名。在他們的檔案之后,只有一個 ruby?? 示例:
post '/payload' do
request.body.rewind
payload_body = request.body.read
verify_signature(payload_body)
push = JSON.parse(payload_body)
"I got some JSON: #{push.inspect}"
end
def verify_signature(payload_body)
signature = 'sha256=' OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), ENV['SECRET_TOKEN'], payload_body)
return halt 500, "Signatures didn't match!" unless Rack::Utils.secure_compare(signature, request.env['HTTP_X_HUB_SIGNATURE_256'])
end
這里hmac有一個Lucee的內置函式,按照一些 ruby?? 示例,我已經能夠為簡單的訊息重新創建相同的哈希值,例如“狐貍跳過東西”。但是,一旦我嘗試使用請求有效負載重新創建簽名,我就永遠不會得到正確的簽名。我已經三次檢查了我的秘密,它與 webhook 中使用的一致,所以我很確定問題在于我如何決議有效負載。以下是我當前的代碼:
headers = request.wheels.HTTPREQUESTDATA.headers;
signature = structKeyExists(headers, "X-Hub-Signature-256") ? headers["X-Hub-Signature-256"] : "error";
payload = request.wheels.params.payload;
mac = 'sha256=' & lCase(hmac(payload, secret, "HMACSHA256"));
這會產生兩個不同的“sha256=...”字串。我的有效負載字串(似乎是正確的格式):
{"action":"added_to_repository",...
任何建議表示贊賞。
uj5u.com熱心網友回復:
我剛剛創建了一個測驗 Github webhook,并且能夠使用以下基本代碼成功驗證 Lucee 中的推送事件:
boolean function verifySignature( required string signature, required string payload, required string secret ){
var expectedSignature = "sha256=" & HMAC( arguments.payload, arguments.secret, "HmacSHA256", "utf-8" ).LCase()
return ( arguments.signature == expectedSignature )
}
requestData = GetHTTPRequestData()
payload = requestData.content.Trim()
signature = requestData.headers[ "X-Hub-Signature-256" ]
secret = "mysecret"
result.verified = verifySignature( signature, payload, secret )
dump( result )
與您的一些小差異:
- 我
GetHTTPRequestData()直接使用內置函式而不是 CFWheels 提供的值 - 我已經修剪了有效載荷
- 我已經指定
utf-8為HMAC()函式的字符編碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/443670.html
標籤:github hmac 露西 转轮 github-webhook
