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

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

<?php
$headers = getallheaders();
$gitee_token = $headers["X-Gitee-Token"];
$gitee_timestamp =$headers["X-Gitee-Timestamp"];
echo "gitee_token: $gitee_token <br />\n";
echo "gitee_timestamp: $gitee_timestamp <br />\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 <br />\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在验签的过程中是不需要的。话说,小白们都等着验签,官方却丢一个,你看,我们是这么生成的,验签你们自己看着办。有点拽。

首发地址与公众号【技术岛】

http://www.jishudao.com/2020/06/29/gitee-php-webhook-sign/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值