首先,我在一個名為 ApiKey 的類中新增了一個參數(shù),并將其初始化為空值。這個參數(shù)將用于存儲我們的Api-Key。
接下來,我對 OnPreDispatch 方法進(jìn)行了修改。該方法會在處理請求之前被調(diào)用,是添加Api-Key驗(yàn)證的理想位置。在這里,我新增了一段代碼,用于調(diào)用一個名為 ValidateApiKey 的方法。

ValidateApiKey 方法是驗(yàn)證Api-Key的核心邏輯。以下是其實(shí)現(xiàn)的關(guān)鍵步驟:
檢查是否需要驗(yàn)證
首先,通過調(diào)用 MustCheckApiKey 方法,判斷當(dāng)前請求是否需要驗(yàn)證Api-Key。例如,對于某些公共API端點(diǎn),我們可能不需要進(jìn)行驗(yàn)證。
獲取請求信息
方法接收兩個參數(shù):
pUrl:請求的地址,例如 /api/resource。pMethod:請求的HTTP方法,如 GET、POST、PUT 等。根據(jù)這些信息,我們可以靈活地決定是否應(yīng)用Api-Key驗(yàn)證。
驗(yàn)證Api-Key
如果需要驗(yàn)證,則檢查類中 ApiKey 參數(shù)的值是否與請求頭中的 api-key 屬性值匹配。如果匹配,則允許請求通過;否則返回 401 Unauthorized 錯誤。
在擴(kuò)展類中,我們可以重寫 MustCheckApiKey 方法,以滿足具體需求。例如,如果我們希望 GET 請求是公共的,而 POST 請求需要驗(yàn)證,可以這樣實(shí)現(xiàn):
// 示例代碼
如果請求是GET到Home,則不應(yīng)用Api-Key驗(yàn)證
以下是一個實(shí)際案例,展示如何在項目中應(yīng)用上述方法:
項目是一個基于IRIS Docker的URL縮短器。在該項目中,我們希望保護(hù)短URL生成端點(diǎn)(POST 請求),但允許用戶無需驗(yàn)證即可訪問縮短的鏈接(GET 請求)。
擴(kuò)展Base類
確保我們的類繼承自 Base.cls 類。例如:
AQS.urlShopener類.UrlREST擴(kuò)展了urlShortener.REST.Base
設(shè)置ApiKey參數(shù)
重寫 ApiKey 參數(shù)的值,例如:
參數(shù)ApiKey="myRandomApiKeyValue"
重寫MustCheckApiKey方法
根據(jù)需求,定義哪些請求需要驗(yàn)證。例如:
如果是POST請求,則需要驗(yàn)證Api-Key;如果是GET請求,則無需驗(yàn)證。
以下是一些請求驗(yàn)證的截圖,展示了正確和錯誤的Api-Key驗(yàn)證結(jié)果:
正確的Api-Key

錯誤或缺失的Api-Key

無需Api-Key的GET請求

通過上述方法,我們可以靈活地為Web應(yīng)用程序的不同端點(diǎn)實(shí)現(xiàn)Api-Key驗(yàn)證,從而提升系統(tǒng)的安全性。我希望本文的內(nèi)容能對您的項目有所幫助。
現(xiàn)在,讓我們享受新實(shí)現(xiàn)的安全功能吧!  .png)
原文鏈接: https://community.intersystems.com/post/how-add-api-key-validation-rest-requests