亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索

基于簽名算法且簡(jiǎn)單安全的API授權(quán)機(jī)制是什么

WBOY
發(fā)布: 2023-05-18 10:49:52
轉(zhuǎn)載
1536人瀏覽過(guò)

筆者以前在做廣告系統(tǒng)時(shí)發(fā)現(xiàn)對(duì)接的大多數(shù)平臺(tái)的廣告系統(tǒng)都是以token方式授權(quán)接口,而且這個(gè)token是一直不變的,由廣告主提供,可以說(shuō)這就是裸奔的接口,只不過(guò)這種接口對(duì)安全性要求不高,這只能防止惡意調(diào)用以及驗(yàn)證渠道的身份。

去年筆者寫(xiě)過(guò)一個(gè)API統(tǒng)一授權(quán)平臺(tái),為內(nèi)部服務(wù)開(kāi)放接口給第三方系統(tǒng)調(diào)用提供統(tǒng)一的授權(quán)管理,除了方便管理接口授權(quán)外,沒(méi)有其它用途,但卻要花成本部署。這應(yīng)該是我做的一個(gè)最無(wú)意義的項(xiàng)目了。

今天介紹的API授權(quán)機(jī)制或許也是使用較為廣泛的一種API接口授權(quán)機(jī)制,記得筆者以前做微信支付功能的時(shí)候,微信提供的支付接口也使用這種方式:簽名。優(yōu)勢(shì):簡(jiǎn)單、不影響性能、不需要額外成本。

這種授權(quán)方法的實(shí)現(xiàn)邏輯是,授權(quán)方為每個(gè)接入平臺(tái)設(shè)置唯一的身份標(biāo)識(shí)(key)以及設(shè)置獨(dú)立密鑰,其實(shí)也就相當(dāng)于賬號(hào)密碼。要求接入方系統(tǒng)在每次發(fā)起請(qǐng)求都在請(qǐng)求頭攜帶三個(gè)參數(shù),分別是身份標(biāo)識(shí)(key)、發(fā)起請(qǐng)求的時(shí)間戳、以及簽名,授權(quán)方系統(tǒng)在接收到請(qǐng)求時(shí)校驗(yàn)簽名,校驗(yàn)通過(guò)才放行請(qǐng)求。

校驗(yàn)簽名的過(guò)程為,從請(qǐng)求頭獲取key和時(shí)間戳,再根據(jù)密鑰通過(guò)相同算法生成簽名(調(diào)用方與授權(quán)方使用相同簽名算法),最后對(duì)比請(qǐng)求頭獲取的簽名是否相等,如果是則校驗(yàn)成功,否則校驗(yàn)失敗。

基于簽名算法的授權(quán)方法實(shí)現(xiàn)過(guò)程如下:

授權(quán)方:

1.定義簽名算法,提供簽名生成算法給接入方,并為接入方生成密鑰和身份標(biāo)識(shí);

2.在項(xiàng)目中攔截需要驗(yàn)證簽名的接口,從請(qǐng)求頭獲取時(shí)間戳和身份標(biāo)識(shí),根據(jù)密鑰和簽名算法生成簽名,將生成的簽名與從請(qǐng)求頭獲取到的簽名比較,如果相同則繼續(xù)步驟3,否則拒絕請(qǐng)求;

3.請(qǐng)求時(shí)效性校驗(yàn),用當(dāng)前系統(tǒng)時(shí)間戳與從請(qǐng)求頭獲取到的時(shí)間戳比較,如果請(qǐng)求在有效時(shí)間范圍內(nèi)則放行請(qǐng)求,否則拒絕并響應(yīng)簽名過(guò)期。

接入方:

1.從授權(quán)方獲取對(duì)接文檔,并向授權(quán)方要密鑰和身份標(biāo)識(shí);

2.根據(jù)文檔提供的簽名生成算法封裝簽名方法;

3.在發(fā)起請(qǐng)求時(shí),將身份標(biāo)識(shí)、當(dāng)前時(shí)間戳、簽名寫(xiě)入請(qǐng)求頭。

UP簡(jiǎn)歷
UP簡(jiǎn)歷

基于AI技術(shù)的免費(fèi)在線簡(jiǎn)歷制作工具

UP簡(jiǎn)歷72
查看詳情 UP簡(jiǎn)歷

簽名生成算法可自定義,如將身份標(biāo)識(shí)(key)、時(shí)間戳(timestamp)和密鑰拼接在一起后,再采用一種不可逆算法對(duì)字符串進(jìn)行加密生成簽名,如MD5算法。規(guī)則越復(fù)雜就越不容易被破解。

簽名加上時(shí)間戳有什么好處?

一是為簽名添加時(shí)效性。授權(quán)系統(tǒng)可以限制簽名的有效時(shí)間為一秒或五秒,利用請(qǐng)求時(shí)間戳和當(dāng)前時(shí)間戳進(jìn)行比較。但要求雙方系統(tǒng)時(shí)間必須正確。

二是安全性,如果黑客攔截了你們系統(tǒng)的請(qǐng)求,然后修改請(qǐng)求再發(fā)起請(qǐng)求,這期間肯定是要時(shí)間的吧,所以當(dāng)系統(tǒng)接收到篡改后的請(qǐng)求時(shí),簽名的有效期已經(jīng)過(guò)去了。如果更改請(qǐng)求頭傳遞的時(shí)間戳,請(qǐng)求的授權(quán)方系統(tǒng)將生成不同于請(qǐng)求頭傳遞的簽名,因此請(qǐng)求仍將無(wú)效。

如果你不知道密鑰,在了解授權(quán)方(肉雞)的簽名規(guī)則的前提下,也無(wú)法生成有效的簽名。使用非對(duì)稱加密算法簽名的文件,幾乎不可能通過(guò)暴力破解破解密鑰。

那為什么用時(shí)間戳而不用格式化時(shí)間字符串呢?

這可能是考慮時(shí)區(qū)上的兼容吧,不同機(jī)房所在時(shí)區(qū)不同的話,時(shí)間就不同,但時(shí)間戳都相同。

為發(fā)揮這種授權(quán)方式的安全性,首先是生成簽名的規(guī)則必須夠復(fù)雜,然后是簽名的加密算法要不可逆,千萬(wàn)不要使用Base64這種算法,最后是密鑰要足夠長(zhǎng)足夠復(fù)雜,以確保即便在知道簽名生成規(guī)則的情況下,也不可能通過(guò)暴力破解出密鑰。

簽名規(guī)則是指生成加密前的簽名字符串的規(guī)則,例如:規(guī)則包括key、密鑰、時(shí)間戳,其中key和密鑰會(huì)出現(xiàn)兩次。假設(shè)key為“app”,密鑰為"123",時(shí)間戳為"1111111111111",拼接生成的加密前的簽名為"app1231111111111111app123",最后通過(guò)加密算法對(duì)拼接的字符串加密就能生成最終的簽名。

每個(gè)接口都要寫(xiě)一遍簽名邏輯不麻煩嗎?

不需要。對(duì)于授權(quán)方,可通過(guò)過(guò)濾器或者攔截器完成簽名驗(yàn)證邏輯;對(duì)于調(diào)用方,使用不同框架有不同的方法,但我們總能想到辦法只寫(xiě)一次簽名邏輯不是嗎?

以上就是基于簽名算法且簡(jiǎn)單安全的API授權(quán)機(jī)制是什么的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!

相關(guān)標(biāo)簽:
最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件
最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件

每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。

下載
來(lái)源:億速云網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn
最新問(wèn)題
開(kāi)源免費(fèi)商場(chǎng)系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見(jiàn)反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)