API常用签名验证方法(PHP实现)

安安杰尼
Freigeben: 2023-04-08 15:12:02
Original
198602 Leute haben es durchsucht

使用场景

现在越来越多的项目使用的前后端分离的模式进行开发,后端开发人员使用API接口传递数据给到前端开发进行处理展示,在一些比较重要的修改数据接口,涉及金钱,用户信息等修改的接口如果不做防护验证,经常容易被人恶意刷接口,导致巨大的损失。

API签名验证

这里我们引入业内比较通用的签名验证来对接口进行参数加密,有以下优势。

  • 请求的唯一性:计算出的签名是唯一的,可以用来验证。

  • 参数的可变性:参数中包含时间戳参数,这就保证每次的请求计算出得签名都是不一样的。

  • 请求的时效:由于请求中带有当前发起请求的时间戳参数,服务端可以对时间戳进行验证,过滤超出时效的请求。

  • 安全性:即使请求被人恶意抓包,对方恶意篡改其中的参数,那么签名都是错误的,参数无法修改。

实践出真理

1. 对map类型(即一组键值对)的待签名数据根据键的大小进行排序。map中各参数按字母顺序排序,如果第一个字母相同,按第二个字母排序,依次类推。例如

{ "timestamp": "2017-06-08 09:38:00", "format": "xml", "app_id": "aabbc", "cp_extend_info": "", "sign_type": "HMAC-SHA1", "sign": "abc" }
Nach dem Login kopieren

那么,排序后变成

{ "app_id": "aabbc", "cp_extend_info": "", "format": "xml", "sign_type": "HMAC-SHA1", "timestamp": "2017-06-08 09:38:00" }
Nach dem Login kopieren

注意:如果map中包含签名的参数(sign)需要过滤该参数的键值不参与签名,没有值的参数请不要参与签名

2. 对排序后的map进行序列化处理成待签名字符串,拼接后的待签名字符串为

app_id=aabbc&format=xml&sign_type=HMAC-SHA1×tamp=2017-06-08 09:38:00
Nach dem Login kopieren

3. 根据HMAC-SHA1算法使用密钥提取待签名字符串的摘要(hash)签名并进行base64_encode编码(便于显性传输和对比),假设签名密钥为 test ,则提取出的摘要签名并进行base64_encode的值为

JqoEqPIVVor0eyRHMYiZftsycVo=
Nach dem Login kopieren

注意:由于有些数据根据HTTP协议需求,在网络传输过程中需要进行URLencoding,这样接收方才可以接收到正确的参数,但如果这个参数参与签名,那么待签名字符串必须是字符串原值而非URLencoding 的值。

代码实践

PHP示例

/** * 使用密钥生成HMAC-Sha1签名 * @param array $params 请求参数 * @param string $signKey 签名密钥 * @return string */ function hmacSha1Sign($params,$signKey) { ksort($params); $paramString = ''; foreach ($params as $key => $value) { if (is_null($value) || $value=='' || $key == 'sign') { continue; } $paramString .= $key.'='.$value.'&'; } $paramString = substr($paramString,0,-1); $sign = base64_encode(hash_hmac("sha1", $paramString, $signKey, $raw_output=TRUE)); return $sign; }
Nach dem Login kopieren

以上就是日常开发中常用的API验证签名方式,很简单又非常使用,欢迎关注获取更多的教程。

Das obige ist der detaillierte Inhalt vonAPI常用签名验证方法(PHP实现). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
api
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!