基於簽章演算法且簡單又安全的API授權機制是什麼
筆者以前在做廣告系統時發現對接的大多數平台的廣告系統都是以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",最後透過加密演算法對拼接的字串加密演算法對接合的字串加密演算法產生最終的簽章。
每個介面都要寫一次簽章邏輯不麻煩嗎?
不需要。對於授權方,可透過過濾器或攔截器完成簽章驗證邏輯;對於呼叫方,使用不同框架有不同的方法,但我們總是能想到辦法只寫一次簽章邏輯不是嗎?
以上是基於簽章演算法且簡單又安全的API授權機制是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP和ManticoreSearch開發指南:快速建立搜尋API搜尋是現代Web應用程式中不可或缺的功能之一。無論是電子商務網站、社交媒體平台還是新聞門戶,都需要提供一個高效、準確的搜尋功能來幫助用戶找到他們感興趣的內容。而ManticoreSearch作為一個效能卓越的全文搜尋引擎,為我們提供了一個強大的工具來創建出色的搜尋API。本文將向您介紹如何

如何在PHP專案中透過呼叫API介面來實現資料的爬取與處理?一、介紹在PHP專案中,我們經常需要爬取其他網站的數據,並對這些數據進行處理。而許多網站提供了API接口,我們可以透過呼叫這些接口來取得資料。本文將介紹如何使用PHP來呼叫API接口,實現資料的爬取與處理。二、取得API介面的URL和參數在開始之前,我們需要先取得目標API介面的URL以及所需的

Oracle是一家全球知名的資料庫管理系統供應商,其API(ApplicationProgrammingInterface,應用程式介面)是一種強大的工具,可協助開發人員輕鬆地與Oracle資料庫互動和整合。在本文中,我們將深入探討OracleAPI的使用指南,向讀者展示如何在開發過程中利用資料介面技術,同時提供具體的程式碼範例。 1.Oracle

標題:如何處理LaravelAPI報錯問題,需要具體程式碼範例在進行Laravel開發時,常會遇到API報錯的情況。這些報錯可能來自於程式碼邏輯錯誤、資料庫查詢問題或是外部API請求失敗等多種原因。如何處理這些報錯是一個關鍵的問題,本文將透過具體的程式碼範例來示範如何有效處理LaravelAPI報錯問題。 1.錯誤處理在Laravel

OracleAPI整合策略解析:實現系統間無縫通信,需要具體程式碼範例在當今數位化時代,企業內部系統之間需要相互通信和資料共享,而OracleAPI就是幫助實現系統間無縫通信的重要工具之一。本文將從OracleAPI的基本概念和原則入手,探討API整合的策略,最終給出具體的程式碼範例幫助讀者更好地理解和應用OracleAPI。一、OracleAPI基本

ReactAPI呼叫指南:如何與後端API進行互動和資料傳輸概述:在現代的Web開發中,與後端API進行互動和資料傳輸是一個常見的需求。 React作為一個流行的前端框架,提供了一些強大的工具和功能來簡化這個過程。本文將介紹如何使用React來呼叫後端API,包括基本的GET和POST請求,並提供具體的程式碼範例。安裝所需的依賴:首先,確保在專案中安裝了Axi

開發建議:如何利用ThinkPHP框架進行API開發隨著網際網路的不斷發展,API(ApplicationProgrammingInterface)的重要性也日益凸顯。 API是不同應用程式之間進行通訊的橋樑,它可以實現資料共享、功能呼叫等操作,為開發者提供了相對簡單且快速的開發方式。而ThinkPHP框架作為一款優秀的PHP開發框架,具有高效能、可擴展且易用

在資料驅動的應用程式和分析領域,API(應用程式介面)在從各種來源檢索資料方面發揮著至關重要的作用。使用API資料時,通常需要以易於存取和操作的格式儲存資料。其中一種格式是CSV(逗號分隔值),它允許有效地組織和儲存表格資料。本文將探討使用強大的程式語言Python將API資料儲存為CSV格式的過程。透過遵循本指南中概述的步驟,我們將學習如何從API中檢索資料、提取相關資訊並將其儲存在CSV檔案中以供進一步分析和處理。讓我們深入了解使用Python進行API資料處理的世界,並釋放CSV格式的潛
