Golang Gitee Webhook 签名验证
Gitee WebHook 提供WebHook 密钥验证和验证算法,原文地址
-
把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名。
-
对上述得到的结果进行 Base64 encode。
-
对上述得到的结果进行 urlEncode,得到最终的签名(需要使用UTF-8字符集)。
-
由于网上参考别人的代码都是抄袭。而且还转了16进制,踩了半天的坑。
hex.EncodeToString()
转成16进制的字符串哦,出来结果不一致哦。 -
还有Go里面使用的是
PathEscape
这个方法,而QueryEscape
出来结果不一致。 -
另外,Python3 中
urllib.quote_plus
出来的结果也不一致。 -
Python3和Golang中,只需要base64加密后就可以验证了。
-
其余情况未遇到。
参考代码,请自行修改。
func GiteeSign(secret string, timestamp int64) string { stringToSign := fmt.Sprintf("%d\n%s", timestamp, secret) byteStringToSign := []byte(stringToSign) b64 := base64.StdEncoding.EncodeToString(HmacSha256Sign([]byte(secret), byteStringToSign)) return url.PathEscape(b64) } func HmacSha256Sign(secret, msg []byte) []byte { h := hmac.New(sha256.New, []byte(secret)) h.Write(msg) return h.Sum(nil) }
作者: 咕咚!
出处: https://www.cnblogs.com/linga/
关于作者:专注虚拟化,运维开发,RPA,Rust,Go,Python!
本文版权归作者和博客园共有,禁止*.csdn.net转载,禁止以盈利为目的的转载,转载文章,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(oldsixa@163.com)咨询.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2018-07-11 logging模块