学习
实践
活动
专区
工具
TVP
写文章

你网站正确使用JSON Web令牌了吗?

对于不太熟悉的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,可以自己查阅官方最新资料。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200329A0N6O800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券