成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一種基于簽名算法且簡單安全的API授權機制

安全 應用安全 算法
筆者以前在做廣告系統時發現對接的大多數平臺的廣告系統都是以token方式授權接口,而且這個token是一直不變的,由廣告主提供,可以說這就是裸奔的接口,只不過這種接口對安全性要求不高,這只能防止惡意調用以及驗證渠道的身份。

[[384489]]

筆者以前在做廣告系統時發現對接的大多數平臺的廣告系統都是以token方式授權接口,而且這個token是一直不變的,由廣告主提供,可以說這就是裸奔的接口,只不過這種接口對安全性要求不高,這只能防止惡意調用以及驗證渠道的身份。

去年筆者寫過一個API統一授權平臺,為內部服務開放接口給第三方系統調用提供統一的授權管理,除了方便管理接口授權外,沒有其它用途,但卻要花成本部署。這應該是我做的一個最無意義的項目了。

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

這種授權方法的實現邏輯是,授權方為每個接入平臺設置唯一的身份標識(key)以及設置獨立密鑰,其實也就相當于賬號密碼。要求接入方系統在每次發起請求都在請求頭攜帶三個參數,分別是身份標識(key)、發起請求的時間戳、以及簽名,授權方系統在接收到請求時校驗簽名,校驗通過才放行請求。

校驗簽名的過程為,從請求頭獲取key和時間戳,再根據密鑰通過相同算法生成簽名(調用方與授權方使用相同簽名算法),最后對比請求頭獲取的簽名是否相等,如果是則校驗成功,否則校驗失敗。

基于簽名算法的授權方法實現過程如下:

授權方:

1.定義簽名算法,提供簽名生成算法給接入方,并為接入方生成密鑰和身份標識;

2.在項目中攔截需要驗證簽名的接口,從請求頭獲取時間戳和身份標識,根據密鑰和簽名算法生成簽名,將生成的簽名與從請求頭獲取到的簽名比較,如果相同則繼續步驟3,否則拒絕請求;

3.請求時效性校驗,用當前系統時間戳與從請求頭獲取到的時間戳比較,如果請求在有效時間范圍內則放行請求,否則拒絕并響應簽名過期。

接入方:

1.從授權方獲取對接文檔,并向授權方要密鑰和身份標識;

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

3.在發起請求時,將身份標識、當前時間戳、簽名寫入請求頭。

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

簽名加上時間戳有什么好處?

一是為簽名添加時效性。授權方系統可根據請求時間戳與系統當前時間戳比較,限定簽名只能在一秒內有效,或者五秒內有效。但要求雙方系統時間必須正確。

二是安全性,如果黑客攔截了你們系統的請求,然后修改請求再發起請求,這期間肯定是要時間的吧,所以當系統接收到篡改后的請求時,簽名的有效期已經過去了。如果改掉請求頭傳遞的時間戳,那么授權方系統生成的簽名就與請求頭傳遞的簽名不一樣了,請求一樣無效。

即便你知道授權方(肉雞)系統的簽名規則,如果你不知道密鑰,也無法生成有效的簽名。并且由于簽名采用非對稱加密算法,要想通過爆力破解出密鑰幾乎是不可能完成的事情。

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

這可能是考慮時區上的兼容吧,不同機房所在時區不同的話,時間就不同,但時間戳都相同。

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

簽名規則指的是生成加密之前的簽名字符串的規則,如規則:key+密鑰+時間戳+key+密鑰。假設key為“app”,密鑰為"123",時間戳為"1111111111111",拼接生成的加密前的簽名為"app1231111111111111app123",最后通過加密算法對拼接的字符串加密就能生成最終的簽名。

每個接口都要寫一遍簽名邏輯不麻煩嗎?

不需要。對于授權方,可通過過濾器或者攔截器完成簽名驗證邏輯;對于調用方,使用不同框架有不同的方法,但我們總能想到辦法只寫一次簽名邏輯不是嗎?

本文轉載自微信公眾號「Java藝術」,可以通過以下二維碼關注。轉載本文請聯系Java藝術公眾號。

 

責任編輯:武曉燕 來源: Java藝術
相關推薦

2018-12-14 14:30:12

安全檢測布式系測試

2010-03-26 13:34:47

CentOS安裝

2022-02-25 14:42:09

OpenHarmon環境搭建鴻蒙

2021-07-14 23:55:18

數據結構數組

2015-02-04 14:18:06

2009-06-03 15:38:37

Struts框架RBAC

2025-01-13 08:36:26

2011-02-25 13:52:18

Proftpd管理

2011-02-25 13:52:18

Proftpd管理

2017-08-01 18:06:56

2018-05-07 09:48:49

AccordionHBase內存

2020-05-06 11:29:29

UX設計釣魚攻擊用戶體驗

2023-07-18 07:23:11

方案payloadrequest

2021-02-24 09:30:44

人工智能PULSE超分辨率算法

2022-08-08 08:22:22

量子計算

2021-10-26 16:49:34

系統性能定位

2011-07-04 10:17:38

JDBC

2023-03-07 15:08:57

2020-12-23 10:10:23

Pythonweb代碼

2022-06-22 09:44:41

Python文件代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩中文视频 | 国产精品无码专区在线观看 | 精品电影 | 午夜丰满寂寞少妇精品 | 日本精品久久久久久久 | 成人午夜在线观看 | 欧美日韩在线播放 | 偷派自拍 | 午夜免费电影院 | 亚洲一区二区在线播放 | 一区二区三区四区在线视频 | 国产综合在线视频 | 日韩在线精品视频 | 欧美女优在线观看 | 成人在线不卡 | 日本天天操 | 亚洲免费视频播放 | 成人精品系列 | 欧美一区二区三区视频 | 在线免费国产 | 九一在线观看 | 完全免费在线视频 | 亚洲久久一区 | 日韩免费一区二区 | 国产精品成人国产乱 | 自拍视频在线观看 | 日韩成人在线观看 | 男女污污网站 | 婷婷亚洲综合 | 黄色毛片免费 | 亚洲精品乱码久久久久v最新版 | 国产精品国产a级 | 成人精品一区二区 | 日韩欧美在线一区 | 久久亚洲欧美日韩精品专区 | 欧美性一区二区三区 | 亚洲 成人 在线 | 精品久久精品 | 看片91 | 国产在线a | 亚洲精品68久久久一区 |