我為什麼使用JWT

2021-10-05 01:22:11 字數 1115 閱讀 2669

前段時間做資料平台的鑑權,想了很多種方案,但最後還是選擇了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的持續部署方案 ...