Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PHP实现码云Gitee的WebHook密钥验证算法

PHP实现码云Gitee的WebHook密钥验证算法

原创
作者头像
沈唁
修改于 2020-08-17 02:03:31
修改于 2020-08-17 02:03:31
1.1K0
举报
文章被收录于专栏:沈唁志沈唁志

码云的 WebHook 支持两种验证方式,一种是明文密码验证,另外一种是密钥验证

用户通过配置不公开的 WebHook 密钥,在请求时对请求内容签名,服务端在收到请求后以同样的密钥进行签名验证,以确认收到的请求完整且可信任。

整个过程 WebHook 密钥只存在于 Gitee 和服务端,不在网络传输中暴露。

那么 PHP 应该如何验证呢?文档只提供了 Java 和 Python2 的示例代码,我大 PHP 不配验证?

文档中说明了对应的参数:需要一个 timestampsecret,这两个参数从哪来呢?

从请求头中获取,我这里以 Swoole 的 HTTP Server 为例

代码语言:txt
AI代码解释
复制
$signature = $header['x-gitee-token'] ?? '';
$timestamp = $header['x-gitee-timestamp'] ?? '';

获取到所需要的参数之后来看一下具体步骤:

Step1:把 timestamp+"\n"+密钥当做签名字符串,使用 HmacSHA256 算法计算签名。 Setp2:对上述得到的结果进行 Base64 encode。 Setp3:对上述得到的结果进行 urlEncode,得到最终的签名(需要使用 UTF-8 字符集)。

官方文档一不注意就入了坑,文档需要 urlEncode 是因为要拼接到 URL 中,实际验证时是不需要的

不能想着直接反推回去验证,而且 HmacSHA256 不支持反推,我们只能自己生成验证对比进行验证

所以我们可以得到这样的代码:

代码语言:txt
AI代码解释
复制
$signature = $header['x-gitee-token'] ?? '';
$timestamp = $header['x-gitee-timestamp'] ?? '';

$secret = '123456'; // 所配置的密钥信息
$secret_str = "$timestamp\n$secret";
$compute_token = base64_encode(hash_hmac('sha256', $secret_str, $secret, true));
if ($signature !== $compute_token) {
    echo '验证失败';
}

最后,可以直接使用我的 git-deploy 项目

任何个人或团体,未经允许禁止转载本文:《PHP 实现码云 Gitee 的 WebHook 密钥验证算法》,谢谢合作!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
辩证的眼光搞懂 JWT 这个知识点
JWT 由三部分组成:Header,Payload,Signature 三个部分组成,并且最后由.拼接而成。
coder_koala
2020/03/03
1.4K0
辩证的眼光搞懂 JWT 这个知识点
github与gitee代码自动同步到服务器实现PHP项目自动部署webhooks
http://415.759.288.189:8123/webhook/hook.php
OwenZhang
2021/12/07
1.2K0
github与gitee代码自动同步到服务器实现PHP项目自动部署webhooks
PHP JWT简易使用
今天突然就想用一下jwt生成一下token,那么说干就干 首先我先下载了一下composer composer.phar 下载到本地以后,通过cmd命令行进行下载php-jwt,命令为:
超级小可爱
2023/02/20
1.6K0
JWT 登录认证
✨ Token 认证流程 作为目前最流行的跨域认证解决方案,JWT(JSON Web Token) 深受开发者的喜爱,主要流程如下: 客户端发送账号和密码请求登录 服务端收到请求,验证账号密码是否通过 验证成功后,服务端会生成唯一的 token,并将其返回给客户端 客户端接受到 token,将其存储在 cookie 或者 localStroge 中 之后每一次客户端向服务端发送请求,都会通过 cookie 或者header 携带该 token 服务端验证 token 的有效性,通过才返回响应的数据 图片 ✨
江户川码农
2022/07/04
4.5K3
JWT 登录认证
Python 和 PHP 对腾讯云签名 hmac_sha256 算法实现
开宗明义,米扑科技在使用腾讯云的API接口签名中,按照官方示例开发PHP、Python的接口,经常会提示签名错误
阳光岛主
2019/02/18
2.6K0
实战模拟│JWT 登录认证「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170852.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
1.6K0
实战模拟│JWT 登录认证「建议收藏」
虾皮二面:什么是 JWT? 如何基于 JWT 进行身份验证?
JWT (JSON Web Token) 是目前最流行的跨域认证解决方案,是一种基于 Token 的认证授权机制。从 JWT 的全称可以看出,JWT 本身也是 Token,一种规范化之后的 JSON 结构的 Token。
Guide哥
2022/11/07
1.1K0
虾皮二面:什么是 JWT? 如何基于 JWT 进行身份验证?
php 后端实现JWT认证方法示例
JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。基于token的身份验证可以替代传统的cookie+session身份验证方法。
用户2323866
2021/07/13
1.4K0
5 分钟,快速入门 Python JWT 接口认证
为了反爬或限流节流,后端编写接口时,大部分 API 都会进行权限认证,只有认证通过,即:数据正常及未过期才会返回数据,否则直接报错
AirPython
2021/07/12
1.8K0
5 分钟,快速入门 Python JWT 接口认证
浅显易懂讲解如何用JWT来加固API
您一定听说过JSON Web Token(JWT)吧? 它是当前用来保护API的先进技术之一。与大多数安全概念与技术一样,我们在准备使用它之前,了解其工作原理是非常必要且重要的。当然,过于专业和技术性
Lemon黄
2019/12/13
1.1K0
浅显易懂讲解如何用JWT来加固API
JWT 鉴权插件上线!让你的 API 更安全!
除了我们之前更新的 Basic Auth 鉴权插件,这次给大家带来 JWT 鉴权插件。
前端菜鸡2号
2023/04/11
5510
JWT 鉴权插件上线!让你的 API 更安全!
JWT认证
JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间以JSON方式安全地传输信息。由于此信息是经过数字签名的,因此可以被验证和信任。可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对对JWT进行签名。
友儿
2022/09/11
7790
PYTHON 连接钉钉传输工作数据监控
“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章,点击查看活动详情”
百里丶落云
2022/11/03
7100
PYTHON 连接钉钉传输工作数据监控
SCF:云产品业务告警功能
在使用云产品的时候,我们可能会需要一些业务告警,虽然腾讯云已经提供了监控告警功能,但是毕竟是针对一个产品通用的,并不是“定制化”的,那么我们如何做一个定制化的告警系统呢?本文将会通过腾讯云云API对Kafka消息积压数量进行监控(在云监控部分是不提供这个指标的告警),当超过阈值,通过Email以及企业微信和短信等进行业务告警。
None-xiaomi
2019/07/15
1.3K0
JWT令牌相关面试试题(举例说明)
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间以json数据格式安全的传输信息。
changwoo
2024/06/23
3400
JWT令牌相关面试试题(举例说明)
一文了解JWT
本篇博客是我github上our-task:一个完整的清单管理系统的配套教程文档,这是SpringBoot+Vue开发的前后端分离清单管理工具,仿滴答清单。目前已部署在阿里云ECS上,可进行在线预览,随意使用(附详细教程),大家感兴趣的话,欢迎给个star!
呆小鱼LQ
2020/12/28
5300
GitHub WebHook 使用教程
WebHook 直译是网络钩子,可以把 WebHook 看做一种通知方式,只要发生关注的事件,就会发送通知到我们指定的 Web 服务。使用 WebHook 可以让我们在关注的事件发生时收到通知,而不是不断轮训 API 确认事件是否发生,
未读代码
2024/04/10
5600
GitHub WebHook 使用教程
读懂JWT的使用,你就会用PHP如何实现了
什么是JWT JWT(json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。 JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。
友儿
2022/09/11
9520
LoRaServer 笔记 2.4.1 JSON web-tokens 的使用
随着分布式 web 应用的普及,通过 session 管理用户登录状态成本越来越高,JWT 这个 JSON 安全传输方案,被越来越多人用来进行用户身份认证。
twowinter
2020/04/17
6170
php JWT在web端中的使用方法教程
JWT就是一个字符串,经过加密处理与校验处理的字符串,由三个部分组成。基于token的身份验证可以替代传统的cookie+session身份验证方法。三个部分分别如下:
用户2323866
2021/07/13
1.9K0
相关推荐
辩证的眼光搞懂 JWT 这个知识点
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档