Gitee PHP WebHook sign 签名密钥方式验签代码 亲测有效 包通过

作者:

在

官方总是喜欢留一个小坑,提供了python示例代码,也提供了java示例,就是没有提供php代码,折腾了许久,真的要抓狂了!

$headers = getallheaders(); $gitee_token = $headers["X-Gitee-Token"]; $gitee_timestamp =$headers["X-Gitee-Timestamp"]; echo "gitee_token: $gitee_token \n"; echo "gitee_timestamp: $gitee_timestamp \n"; $sign_key = "yuema"; $sec_str = "$gitee_timestamp\n$sign_key"; $compute_token = base64_encode(hash_hmac('sha256', $sec_str,$sign_key,true)); ​ echo "computetoken: $compute_token \n"; ​ if($compute_token==$gitee_token){ echo "授权验证通过\n"; } ​ echo "welcome to yue.ma! "; //git cmd here

亲测,有效!

这种验签的方式,是否有些熟悉?好多平台之间的签名都有种说不出来的默契,是的!找Gitee相关的签名,找到的都是token,感觉没有验签安全,于是,执着的找为什么? 官方文档坑人之处

如果 WebHook 使用了签名方式,在请求目标时会在当次请求头中加入名为 X-Gitee-Token,值为生成的签名内容。其签名实现算法如下: ​ 签名参数说明 参数 说明 timestamp 当前时间戳,单位是毫秒,与请求调用时间误差不能超过1小时,请求时需和密钥一并发送 secret 签名密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串 Step1:把timestamp+”\n”+密钥当做签名字符串,使用HmacSHA256算法计算签名。 Setp2:对上述得到的结果进行 Base64 encode。 Setp3:对上述得到的结果进行 urlEncode,得到最终的签名(需要使用UTF-8字符集)。 第二步,把 timestamp和第一步得到的签名值拼接到URL中。 写的是生成算法,urlEncode在验签的过程中是不需要的。话说,小白们都等着验签,官方却丢一个,你看,我们是这么生成的,验签你们自己看着办。有点拽。

评论

发表回复