你網站正確使用JSON Web令牌(JWT)了嗎?

對於不太熟悉的JSON Web令牌(JWT)的開發者,可以簡單理解為JSON Web令牌(JWT)是用於創建聲明的令牌。例如,服務器可以生成一個令牌,該令牌具有“以管理員身份登陸”的聲明,並將其提供給客戶端。然後,客戶端可以使用該令牌來證明他們以管理員身份登陸,令牌由服務器的密鑰簽名,因此服務器能夠驗證令牌是合法的。

你網站正確使用JSON Web令牌(JWT)了嗎?

​JWT通常包含三部分:標頭,有效負載和簽名。

標頭用於生成簽名的算法,如下所示:

header = '{"alg":"HS256","typ":"JWT"}'

HS256指示此令牌是使用HMAC-SHA256簽名。

payload = '{"loggedInAs":"admin","iat":1422779638}'

根據JWT規範中所建議,有效負載包括時間戳iat(issued at)

簽名是通過base64url對報頭和有效負載進行編碼並以句點作為分隔符將它們連接起來來計算的:

key = 'secretkey'unsignedToken = encodeBase64(header) + '.' + encodeBase64(payload)signature = HMAC-SHA256(key, unsignedToken)

總而言之,我們簽名進行base64url編碼,並使用句點將這三個部分結合在一起,如下:

token = encodeBase64(header) + '.' + encodeBase64(payload) + '.' + encodeBase64(signature)# token is now:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI

而JSON Web令牌(JWT)本身就有漏洞,第一是公開密鑰數據token值。

在前端獲取token值時,只能保存公共文件或公共內容中,因為每次訪問都要提供token值以保證能與服務token值一致。

第二是多數開發者習慣使用對稱算法加密來驗證數據的正確性。

當然很多開發者也針對其做其他防範措施,比如token值保存在數據中,每次客服端訪問都要驗證數據庫token值是否一致等。

目前官方也有更新如何更好使用JWT防止漏洞,如果想更好使用JWT,可以自己查閱官方最新資料。



分享到:


相關文章: