2017-01-07 11 views
0

背景:我通過使用localStorage通過jwt的身份驗證node.js應用程序。智威湯遜簽名和編碼:矯枉過正或好主意

在閱讀了很多意見後,我很困惑。 我有記錄與該代碼的用戶實現:

var payload = jwts.encode({id: user.id}, jwtOptions.secretOrKey); 
var token = jwt.sign(payload, jwtOptions.secretOrKey); 

這是一個有點簡單化。但是,我想知道編碼是否真的有必要。我應該去這個呢?

var payload = {id: user.id}; 
var token = jwt.sign(payload, jwtOptions.secretOrKey); 

我沒有在有效載荷過於敏感數據,但我會加入其中可以看到和利用(用戶的計算機被攻破和localStorage的將顯示他們是「管理員」用戶)索賠。這不是電子商務網站,但我希望它在上面(可能不太可能)的情況下是安全的。

否定的是它使標記更大(大約30%),所以這會影響性能。考慮到人們現在的帶寬,額外的幾個字符真的很重要嗎?

回答

0

RFC 7519 Json Web Token不允許使用您的建議選項。 JWT使用JWS緊湊串行化和每個部分都必須BASE64 URL編碼

甲JWT被表示爲通過 週期(「」)字符分隔網址安全部件的序列。 每個部分都包含一個base64url編碼的 值。在JWT零件的數量取決於使用JWS緊湊 序列化或使用JWE緊湊型系列化

發送JWT沒有系列化JWE產生的JWS的 表示意味着你需要處理的編碼。看看JWS RFC如果你想看到緊湊和扁平化的序列化之間的差異https://tools.ietf.org/html/rfc7515#page-19

+0

謝謝你的片段。幾點:令牌仍然是base64編碼,它是base64編碼的編碼「有效載荷」變量。另外,即使規範聲明jwt是base64編碼,庫允許使用許多不同類型的算法:選項部分中的值 – user2331566

+0

是的,在構建JWT時,JSON有效內容是** base64 url​​編碼**它是一種標準算法,應用base64編碼並在替換了幾個字符後 – pedrofb