摘要:題外話微信公眾號(hào)開(kāi)發(fā)接口里面,是通過(guò)調(diào)用微信的接口的。生成方式如下接口調(diào)用請(qǐng)求說(shuō)明請(qǐng)求方式通過(guò)傳給微信后臺(tái),后臺(tái)就會(huì)返回,這個(gè)是有有效期的,有點(diǎn)類(lèi)似瀏覽器登錄。正常情況下,微信會(huì)返回下述數(shù)據(jù)不過(guò)個(gè)人覺(jué)得傳的方式不太優(yōu)雅。
用戶(hù)認(rèn)證
后臺(tái)服務(wù)要提供公共接口給用戶(hù)調(diào)用,必須要提供認(rèn)證機(jī)制,一旦用戶(hù)認(rèn)證通過(guò),才讓用戶(hù)調(diào)用API。對(duì)于次,可以通過(guò)(access_key,secret_access_key)來(lái)認(rèn)證。
這個(gè)(access_key,secret_access_key)是成對(duì)存在的。用戶(hù)要調(diào)用API必須要申請(qǐng)這樣的一對(duì)數(shù)據(jù)。一般工作流程是:
用戶(hù)在前端申請(qǐng)access key
服務(wù)器在后臺(tái)生成(access_key,secret_access_key),然后存進(jìn)數(shù)據(jù)庫(kù),然后把這對(duì)數(shù)據(jù)返回給用戶(hù)
用戶(hù)的調(diào)用API流程是:
通過(guò)secret_access_key來(lái)給請(qǐng)求參數(shù)簽名,并且把簽名附加到請(qǐng)求里,然后發(fā)請(qǐng)求給服務(wù)器
服務(wù)器通過(guò)請(qǐng)求里的參數(shù)access_key來(lái)查詢(xún)數(shù)據(jù)庫(kù)里的secret_access_key,然后用secret_access_key計(jì)算請(qǐng)求參數(shù)的簽名是否跟請(qǐng)求里的簽名一致,一致則確認(rèn)用戶(hù)身份,不一致則拒絕訪問(wèn)。
簽名接下來(lái)介紹給參數(shù)簽名的方法。如果請(qǐng)求參數(shù)如下:
{ "name": "fami", "address": "pek" }
把a(bǔ)ccess_key加進(jìn)這個(gè)請(qǐng)求里:
{ "name": "fami", "address": "pek", "access_key": "abc" }
將這些參數(shù)按key的字母升序排序,然后以key=value的形式表示,然后用&連接起來(lái)。效果如下:
access_key=abc&address=pek&name=fami
然后用以secret_access_key為key用sha256(或其他算法)對(duì)這個(gè)字符串進(jìn)行簽名,如果簽名后得到`
signature = "xxxxxxxx"
那么把這個(gè)簽名添加到請(qǐng)求參數(shù)里,得到
{ "access_key": "abc", "name": "fami", "address": "pek", "signature": "xxxxxxxx" }
最終把這個(gè)發(fā)給服務(wù)器,服務(wù)器根據(jù)參數(shù)里的access_key去查看secret_access_key,然后把參數(shù)里的signature字段取出來(lái),用前面的簽名方法來(lái)對(duì)剩下的參數(shù)進(jìn)行簽名,如果發(fā)現(xiàn)自己計(jì)算的簽名跟請(qǐng)求參數(shù)里的簽名一樣,那么則通過(guò)認(rèn)證。
安全問(wèn)題這里會(huì)有一個(gè)問(wèn)題:如果這個(gè)(access_key,secret_access_key)被別人知道了,那么別人就會(huì)以我的身份去調(diào)用API了。確實(shí)會(huì)有這個(gè)問(wèn)題,針對(duì)此,可以用以下的方法來(lái)減小影響。
access key支持ip白名單,只有在白名單內(nèi)的ip才可以調(diào)用API。
access key支持設(shè)置有效期,也就是在有效時(shí)間內(nèi),該access key有效,過(guò)了這個(gè)有效期,就拒絕訪問(wèn)。
access key支持修改狀態(tài),只有狀態(tài)為可用的情況下,服務(wù)器才會(huì)接受。
用戶(hù)使用API必然會(huì)擔(dān)心安全問(wèn)題。在此之外還可以做些類(lèi)似定期提醒用戶(hù)修改access key狀態(tài),或者定期刪除access key。
題外話微信公眾號(hào)開(kāi)發(fā)接口里面,是通過(guò)access_token調(diào)用微信的接口的。access_token生成方式如下:
接口調(diào)用請(qǐng)求說(shuō)明
https請(qǐng)求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
通過(guò)傳appid, appsecret給微信api后臺(tái),后臺(tái)就會(huì)返回access_token,這個(gè)access_token是有有效期的,有點(diǎn)類(lèi)似瀏覽器登錄。
正常情況下,微信會(huì)返回下述JSON數(shù)據(jù):
{"access_token":"ACCESS_TOKEN","expires_in":7200}
不過(guò)個(gè)人覺(jué)得傳appsecret的方式不太優(yōu)雅。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/41906.html
在tp上實(shí)現(xiàn)的auth2驗(yàn)證的,在網(wǎng)上發(fā)現(xiàn)筆記很少, 不像yii, 故在此發(fā)表一下筆記,用來(lái)幫助有相關(guān)需求的朋友 PS: 鑒于oauth2有四種方案, 本實(shí)例是基于 客戶(hù)端憑證 實(shí)現(xiàn),其他三種就不講述了 一、通過(guò)composer安裝 composer require --prefer-dist bshaffer/oauth2-server-php 安裝完成后,如圖:showImg(https://...
摘要:發(fā)現(xiàn)指向的是,也就是說(shuō),在函數(shù)內(nèi)部實(shí)現(xiàn)的閉包函數(shù)已經(jīng)被轉(zhuǎn)變成了全局函數(shù),存儲(chǔ)到了內(nèi)存中。閉包同樣可以模擬面向?qū)ο蟮乃接凶兞康姆椒ê妥兞康氖褂煤瞳@取。 https://developer.mozilla.org... 首先引用來(lái)自官網(wǎng)文檔的定義: closure is the combination of a function and the lexical environment wi...
摘要:壓力測(cè)試工具請(qǐng)求數(shù)并發(fā)數(shù)請(qǐng)求是一個(gè)高性能的和反向代理服務(wù),也是一個(gè)服務(wù)。 壓力測(cè)試工具:ab ab -n 請(qǐng)求數(shù) -c 并發(fā)數(shù) 請(qǐng)求url Nginx: Nginx (engine x) 是一個(gè)高性能的HTTP和反向代理服務(wù),也是一個(gè)IMAP/POP3/SMTP服務(wù)。 特點(diǎn): IO多路復(fù)用epoll 輕量級(jí) CPU親和(affinity):把每個(gè)worker進(jìn)程固定在一個(gè)cpu上執(zhí)...
閱讀 1491·2021-09-24 10:26
閱讀 1761·2019-08-30 14:14
閱讀 2233·2019-08-29 16:54
閱讀 436·2019-08-29 14:09
閱讀 1553·2019-08-29 12:55
閱讀 1018·2019-08-28 18:13
閱讀 1653·2019-08-26 13:39
閱讀 2672·2019-08-26 11:43