JWT的正確使用方法,API開發為什麼使用JWT

API開發越來越成為主流,需要各自Access Token做登錄狀態。

甚至目前web端mvvm應用,如angular、vue、react都使用了jwt方式,也就是不再使用cookie和session作為登錄狀態。有很多作為這種無狀態http的身份登錄狀態方法,原理也差不多,無非就是獲得客戶端的標識,把服務器的信息和客戶端的交互信息在傳輸時附帶上。

JWT的正確使用方法,API開發為什麼使用JWT

較為流行的傳輸身份驗證碼方法就是jwt,jwt只是一種約定,可選擇不同的數據加密簽名。

本質上只是一種“簽名”而不是加密。

jwt生成的token如下:

<code>eyJhbGciOiJIUzI1NiJ9.eyJ1aWQiOjEsImFpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsIm1vYmlsZSI6IjEzNTI5NTEzMTA0IiwiaXAiOiIwOjA6MDowOjA6MDowOjEiLCJleHAiOjE1ODU4NDc5MTJ9.edv0BBpe_S6GDmtSp6Q7stsRrxBDesWr9MOjqcGdyR8/<code>

事實上就是把token分成三段,使用點號 " ." 分割字符串。前兩段的內容就是header和payload。後面的是使用選擇的加密算法生成的簽名。

JWT的正確使用方法,API開發為什麼使用JWT

JWT.io 上面有各種不同語言的實現,不同的語言不同的庫能解析和生成,以及附加的參數不同。但基本原理就是使用base64進行數據編碼,再進行簽名。而不是傳輸數據是直接加密的,當然你也可以選擇加密的算法,但是越複雜服務器解析越慢。

JWT的正確使用方法,API開發為什麼使用JWT


因為jwt只是編碼,不是一種加密,所以jwt token作為身份令牌,需要注意不要把危險的參數如密碼放在token裡,如果你執意要這麼做,那麼就需要把token放在服務器數據庫或者緩存,再生產一個簽名使用加密簽名進行api與服務器的通信,但這實在是多此一舉。

jwt本就是連接授權認證,如果每次連接還做持久化查詢,那麼無疑增加了性能消耗。

而傳輸一個身份ID其實就可以了,所以,jwt儘量簡短簡單即可。

選擇實現庫或者自己實現都可以,但是最好選擇github star數量多的,這是大多數人驗證過的。

JWT的正確使用方法,API開發為什麼使用JWT

傳輸jwt一般使用header,也可以使用get參數傳值。這看服務器端與客戶端的http請求庫如何方便實現。

比如某些前端上傳工具,就不能自定義header,那就只能使用url get參數傳。服務器也要做好適當的接口規劃。


分享到:


相關文章: