後臺服務要提供公共接口給用戶調用,必需要提供認證機制,一旦用戶認證經過,才讓用戶調用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的方式不太優雅。