通用API平台需要对每一个访问请求进行身份验证。
借鉴阿里云的SDK。

用户机制

API平台里的每一个用户有自己的uid。
每一个用户可以有一个或者多个appKey和appSecret。即一组appKey和appSecret标记一个应用。
其中appKey用来管理权限。【唯一】(24位随机字符串)(lumen里可以使用str_random()生成)
appSecret用来签名。(32位随机字符串)(lumen里可以使用str_random()生成)
appKey为每次请求必传的参数

签名规则

  1. 排序请求字符串
    对所有的请求参数,按照参数名称的字典顺序进行排序

  2. 参数编码
    对所有的请求参数的键值相连接然后进行RFC3986规则进行编码
    编码规则为:
    对于字符 A-Z、a-z、0-9 以及字符 - 、 _ 、 . 、 ~ 不编码。
    对于其他字符编码成 %XY 的格式,其中 XY 是字符对应 ASCII 码的 16 进制表示。比如半角的双引号 ” 对应的编码就是 %22 。
    对于扩展的 UTF-8 字符,编码成 %XY%ZA… 的格式。
    需要说明的是半角的空格要被编码是 %20 ,而不是加号 + 。
    注意:一般支持 URL 编码的库(比如 PHP 中的 urlencode )都是按照 application/x-www-form-urlencoded 的 MIME 类型的规则进行编码。可以直接使用这类方式进行编码,把编码后的字符串中加号 + 替换成 %20 、星号 * 替换成 %2A 、 %7E 替换回波浪号 ~ ,即可得到上述规则描述的编码字符串。

  3. 构造用于计算签名的字符串

StringToSign=
//get或者post
HTTPMethod +
编码后的参数
  1. 计算HMAC值
    按照 RFC2104 的定义,使用步骤 3 得到的字符串 StringToSign 计算签名 HMAC 值。
    注意:计算签名时,使用的 Key 就是您的 appSecret,使用的哈希算法是 SHA1。
  2. 计算签名
    按照 Base64 编码规则,把步骤 3 得到的 HMAC 值编码成字符串,即得到签名值(Signature)。
  3. 将签名作为signature参数添加到请求中

签名代码 PHP版本

//1.排序参数
ksort($parameters);
//2.对参数进行URL编码
$paramsStr = '';
foreach ($parameters as $k => $v) {$paramsStr .= $k . $v;
}
$res = urlencode($paramsStr);
$res = preg_replace('/\+/', '%20', $res);
$res = preg_replace('/\*/', '%2A', $res);
$res = preg_replace('/%7E/', '~', $res);
//3.构造计算签名的字符串
$stringToSign = $request->getMethod() . $res;
//4.计算HMAC值
$hmacStr = hash_hmac('sha1', $stringToSign, $appSecret, true);
//5.返回签名值
$signature = base64_encode($hmacStr);

api平台通用签名机制相关推荐

  1. 微信公众平台通用接口API指南

    下述文档已过期,新版文档请访问 http://www.cnblogs.com/txw1958/p/weixin-access-token.html 微信公众平台目前分成消息接口和通用接口两大模块. 接 ...

  2. E码通电子凭证服务平台 通用接口接入规范

    E码通电子凭证服务平台 通用接口接入规范 E码通电子凭证服务平台 通用接口接入规范 V 1.0 文档变更记录 版本 日期 变更内容 操作者 备注 V 1.0 2011-05-05 创建 Bill 初始 ...

  3. 【Android安全】Android app开发者证书和代码签名机制

    参考链接: 安卓证书相关验证机制: https://duanqz.github.io/2017-09-01-Android-Digital-Signature (部分内容不准确) 关于META-INF ...

  4. NAS聪明如人? 如何自己寻找答案!道翰天琼认知智能机器人API平台接口为您揭秘。

    NAS聪明如人? 如何自己寻找答案!道翰天琼认知智能机器人API平台接口为您揭秘. 近期,神经网络结构搜索 (NAS)引起了学界和工业界的高度关注.目前,NAS已在很多任务(尤其是CV相关任务)上得到 ...

  5. 微信公众平台开发教程(九)微信公众平台通用开发框架

    微信公众平台开发教程(九)微信公众平台通用开发框架 一.思考 开发了几个微信项目,一直在思考: 如何将微信相关的处理与业务系统联系在一起? 如何做到彼此分离,且易于扩展? 能否开发一套独立的微信服务框 ...

  6. 比特币多重签名机制使用篇

    原文链接:http://www.wanbizu.com/baike/201408191710.html 概述 比特币的多重签名机制可以实现多方共同管理资产,也可以用于第三方交易担保. 多重签名最多支持 ...

  7. springboot接口签名统一效验_Python如何接入开放平台?签名验签、加密解密、授权认证测试实战...

    当前大型top企业都有非常成熟的开放平台业务,比如微信开放平台.新浪微博开放平台.支付宝开放平台等.开放平台的发展为第三方个人或企业提供了巨大的机遇.开发者想要接入各大开放平台,必须要遵从开放平台的安 ...

  8. 区块链中的数学 - EdDSA签名机制

    Ed25519 使用了扭曲爱德华曲线,签名过程和之前介绍过的 Schnorr,secp256k1, sm2 都不一样,最大的区别在于没有使用随机数,这样产生的签名结果是确定性的,即每次对同一消息签名结 ...

  9. ios keychain 不被清理_iOS签名机制和说明文件【ios企业签名吧】

    IOS签名机制和配置文件.iOS签名机制的作用:保证安装在手机上的应用程序经苹果公式验证和许可.无论是真机调试还是发布App,开发人员都必须经过一些复杂的步骤.以下广州贝壳技术将详细说明. 贝壳科技( ...

最新文章

  1. Web服务器 之 Apache 2.x 服务器中的URL重写的配置和应用
  2. python 读excel中一个表_python – pandas read_excel在同一张表上的多个表
  3. openstack中glance组件images的全部python API 汇总
  4. 5.中文问题(自身,操作系统级别,应用软件的本身),mysql数据库备份
  5. ajax回调给全局变量,jquery.Ajax回调成功后数据赋值给全局变量的问题
  6. ViewPager 详解(二)---详解四大函数
  7. iPhone 12性能首曝:6GB内存、A14“挤牙膏”
  8. ArcPy常用类介绍
  9. BWA关于Unmatched SAI magic. Please re-run `aln' with the same version of bwa.
  10. 湖南华容县职业中专学校创客实训室
  11. pano2vr怎么制作漫游_如何制作全景图?Pano2VR制作FLASH全景图教程
  12. 中山公园再添一座新地标,青岛首家丛林书吧“林荫阅读室”
  13. linux4 系统下载,SysLinux 4.0.4 下载
  14. Flutter流畅性fps计算
  15. 最全最详细的蓝牙版本介绍包含蓝牙4.0和4.1
  16. Android7.0(mtk)开放root权限,adb root和app root
  17. Anuglar8集成高德地图
  18. Python学习笔记(八)—切片(slicing)
  19. 互联网寒冬下如何过冬?厚积薄发还是直接开摆?我选这个
  20. layui框架学习(4:导航)

热门文章

  1. 接口测试-TPshop-接口文档
  2. 关林:Happy birthday to me!
  3. 语音输入法出了这么多年我几乎没用过,直到……
  4. Dell 远程访问管理卡iDRAC7
  5. 激光SLAM深度剖析
  6. 项目实列:飞机大战上(了解pygame)
  7. python时间函数带时区_Python pytz时区函数返回的时区为9分钟 - python
  8. 新iPhone全面5G!4种杯型,最便宜只要5500,均内置中国北斗-1
  9. JF希勒布兰德推出全新数字客户平台myHillebrand
  10. java中apache安装与配置_apache tomcat的安装与配置