1. 角色:
服务提供商开发者
2. 大概流程
开发者:
1. 开发者在服务提供商那边添加应用,服务提供商分配appid,appkey
2. 签名
参数ACSII从小到大排序
参数值为空不参与签名
参数名区分大小写
php为例
$params = ksort($params); //参数ACSII从小到大排序
....循环拼接.... //参数循环名,值字符串 &连接
$params .= "key=".$appkey; //拼接密钥
$sign = strtolower(md5(params)); //生成签名,转换为小写
3. 接口请求
原参数带上sign参数,sign值为签名后的字符串
eg:
platform 1
uid 2016539
sign 25B8EFA53D7D6AE5D136CAEB0E2D4E1A
appid 4
username m258369
nonce_str 12552355 //随机字符串
服务提供商:
1. 验证appid是否存在,有,得到appkey
2. 签名验证,保证参数是否完整,没有篡改过(传过来的参数,去掉sign参数,组装生成签名与sign参数比较,如果相等,签名通过,如果不相等,签名不通过,数据被更改过)
3. 签名通过,求接口数据
- 确认哪位用户在做 API 请求。因为在发送请求前需要用户指定生成数字签名的秘钥对,在服务端即可通过该秘钥对确定用户身份,进而可做访问权限管理。
- 确认用户请求在网络传输过程中有无被篡改。因为服务端会对接收到的请求内容重新计算数字签名,一旦请求内容在网络上被篡改,则无法通过数字签名比对。
数字签名是个加密的过程,数字签名验证是个解密的过程。(appid 公钥 appkey私钥)
更多:https://help.aliyun.com/document_detail/29012.html?spm=a2c4g.11186623.6.773.78y3gq
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=4_3