gpt4 book ai didi

go - 在 Go 中验证 GitHub Webhook HMAC 签名

转载 作者:数据小太阳 更新时间:2023-10-29 03:02:55 25 4
gpt4 key购买 nike

我编写了以下函数来验证 GitHub API 返回的作为 Webhook 负载一部分的 X-Hub-Signature 请求 header 。

func isValidSignature(r *http.Request, key string) bool {
// Assuming a non-empty header
gotHash := strings.SplitN(r.Header.Get("X-Hub-Signature"), "=", 2)
if gotHash[0] != "sha1" {
return false
}
defer r.Body.Close()

b, err := ioutil.ReadAll(r.Body)
if err != nil {
log.Printf("Cannot read the request body: %s\n", err)
return false
}

hash := hmac.New(sha1.New, []byte(key))
if _, err := hash.Write(b); err != nil {
log.Printf("Cannot compute the HMAC for request: %s\n", err)
return false
}

expectedHash := hex.EncodeToString(hash.Sum(nil))
log.Println("EXPECTED HASH:", expectedHash)
return gotHash[1] == expectedHash
}

但是,这似乎不起作用,因为我无法使用正确的 secret 进行验证。这是一个示例输出,如果有帮助的话:

HUB SIGNATURE: sha1=026b77d2284bb95aa647736c42f32ea821d6894d
EXPECTED HASH: 86b6fa48bf7643494dc3a8459a8af70008f6881a

我使用了 hmac-examples 中的逻辑repo 作为指导方针并实现了代码。但是,我无法理解这种差异背后的原因。

如果有人能指出我在这里犯的小错误,我将不胜感激。

引用:Delivery Headers

最佳答案

这真的很尴尬,但我仍然想分享我是如何解决它的。

我发送了错误的 key 作为输入,这导致了所有的困惑。

经验教训:

  1. 以上代码片段绝对正确,可以用作验证器。
  2. 每个人都会犯愚蠢的错误,但只有智者会承认并改正错误。

关于go - 在 Go 中验证 GitHub Webhook HMAC 签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53242837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com