后台服务要提供公共接口给用户调用,必需要提供认证机制,一旦用户认证经过,才让用户调用API。对于次,能够经过(access_key,secret_access_key)来认证。
这个(access_key,secret_access_key)是成对存在的。用户要调用API必需要申请这样的一对数据。通常工做流程是:前端
用户的调用API流程是:算法
接下来介绍给参数签名的方法。若是请求参数以下:数据库
{ 'name': 'fami', 'address': 'pek' }
把access_key加进这个请求里:api
{ 'name': 'fami', 'address': 'pek', 'access_key': 'abc' }
将这些参数按key的字母升序排序,而后以key=value
的形式表示,而后用&
链接起来。效果以下:浏览器
access_key=abc&address=pek&name=fami
而后用以secret_access_key为key用sha256(或其余算法)对这个字符串进行签名,若是签名后获得`安全
signature = 'xxxxxxxx'
那么把这个签名添加到请求参数里,获得服务器
{ 'access_key': 'abc', 'name': 'fami', 'address': 'pek', 'signature': 'xxxxxxxx' }
最终把这个发给服务器,服务器根据参数里的access_key去查看secret_access_key,而后把参数里的signature字段取出来,用前面的签名方法来对剩下的参数进行签名,若是发现本身计算的签名跟请求参数里的签名同样,那么则经过认证。微信
这里会有一个问题:若是这个(access_key,secret_access_key)被别人知道了,那么别人就会以个人身份去调用API了。确实会有这个问题,针对此,能够用如下的方法来减少影响。app
用户使用API必然会担忧安全问题。在此以外还能够作些相似按期提醒用户修改access key状态,或者按期删除access key。code
微信公众号开发接口里面,是经过access_token调用微信的接口的。access_token生成方式以下:
接口调用请求说明
https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
经过传appid, appsecret给微信api后台,后台就会返回access_token,这个access_token是有有效期的,有点相似浏览器登陆。
正常状况下,微信会返回下述JSON数据:
{"access_token":"ACCESS_TOKEN","expires_in":7200}
不过我的以为传appsecret的方式不太优雅。