前段時間做資料平台的鑑權,想了很多種方案,但最後還是選擇了jwt來進行身份驗證與許可權控制。
期間考慮過傳統的user/passwd -> session_id,也考慮了隨機生成token,後端再來維護一套許可權控制邏輯,甚至打算使用類似kebos這種來實現安全通訊,但對於資料平台這種業務,感覺許可權控制這裡這些方案都有點重量級了。
內網環境相對是安全的,對內網進行混雜模式抓包會被安全的人抓到,所以身份偽造這個問題其實不是那麼嚴重。使用證書這種方式系統消耗又很大,資源利用率不高。
思來想去,發現還是得從我們最初的目的出發,想明白客戶到底想要什麼,而不是為了高大上而選擇難度最高的方案。
我們要的很簡單,區分介面呼叫方,對介面新增許可權控制,無許可權、無token的呼叫返回400錯誤,同時對所有請求的入參、出參都進行記錄。
簡單點就是,我們需要知道 是否有許可權的 誰 在什麼時候 呼叫了 什麼介面,入參是什麼,得到了什麼返回。
這就很簡單了。
跟鑑權有關的,我們只需要區分出是誰跟是否有許可權即可。
結合內網環境相對安全,可提供固定token、介面訪問頻繁,鑑權最好與資料庫分離,實現橫向擴容等原因,jwt便從眾多方案中脫穎而出。
鑑權邏輯無需訪問資料庫,任何情況下都不會擊穿快取打到資料庫影響業務;
與資料庫解耦,橫向擴容性佳,token發放、驗證都可以脫離資料庫
同樣是提供token,但jwt中可附帶允許的許可權/操作,業務無需實現複雜的許可權控制邏輯,只需要判斷token中是否有對應許可權即可;
資料平台主要的功能就是提供資料訪問介面與資料上傳介面,沒有傳統web應用的那種上下文關係。過重的鑑權邏輯不太符合當前業務特點;
使用多版本私鑰,通過更改固定版本簽名所用的私鑰可以批量廢除發出的token;使用redis等快取後亦可實現對單一token的**
業務只有上傳/拉取這兩個操作,只需要區分當前使用者是誰即可
沒有上下文的環境(有其實也可以,但這樣他的優勢就沒那麼大)
只需要區分使用者
不想讓鑑權用到的資料庫成為可能的瓶頸
業務行為簡單,只提供curd這類功能
可以實現自動化的token發放,並且網路環境相對安全
我為什麼使用PowerShell
在windows作業系統上,之前我通常用cmd執行命令列操作,比如在cmd使用ipconfig命令檢視本機ip,但是我現在則經常使用powershell。怎麼開啟powershell,以win10為例 ctrl q 開啟cortana搜尋 輸入powershell x86代表32位作業系統,像我的機...
我為什麼使用gmail?
據說有一項調查顯示,一般來說都是精英或者有精英意識的人們才會用gmail。當然,對於google 的使用也是如此。好吧,我承認,我不是精英,而且也想成為精英。但是我必須說明,這不是我使用gmail的原因。在很久很久以前,那時候的gmail還沒有開放註冊,還需要邀請的時候,我從豆瓣的乙個朋友那裡得到了...
我為什麼選擇使用容器?
編者的話 作者主要介紹了自己選擇使用容器的6個主要原因,這也是容器為我們的工作帶來的一些好處。燒腦式kubernetes實戰訓練營 本次培訓理論結合實踐,主要包括 kubernetes架構和資源排程原理 kubernetes dns與服務發現 基於kubernetes和jenkins的持續部署方案 ...