JWT介绍
By admin
- One minute read - 44 wordsJWT是什么
JWT全称是JSON Web Tokens,是RFC 7519标准,用于安全校验两方可信性的安全措施。
JWT解决了哪些问题?
JWT本身设计是用于解决Session机制不能够很好的在SPA/API类型(restful)应用中处理身份认证问题。通常API的调用是无状态(stateless)的,使用Session等形式会有上下文要求。如当用户登录完成后,可以通过下发JWT的形式进行无状态的API调用。在此之前通常是使用的方式包括不限于如Basic Auth、Oauth2或Token形式进行。
JWT相比是额外添加了签名校验方式,本质上来说对抗如暴力碰撞等形式有一些作用。但是由于本身长度的限制,存储的信息量有限。
JWT处理方式
JWT内容主要分为三段,分别对应头部信息,存储数据和签名信息三部分,中间使用『.』符号连接,三段信息均进行Base64编码。
具体实现方式可参考如下伪代码实现:
encodeBase64(header) + ‘.’ + encodeBase64(payload) + ‘.’ + Sign(key + encodeBase64(header) + ‘.’ + encodeBase64(payload))
其中Sign的算法是可以在header中进行定义,支持如HMAC-SHA256和RSA-SHA256等方式。key则是用于验证的key信息。
其中header格式如下:
{
“alg”: “HS256”, //指定加密算法,可以选择RS256等。
“typ”: “JWT”
}
payload为存储的数据区块,由于此部分未进行加密,不建议存储敏感信息。内容为字典结构。
JWT存在的安全问题
JWT披露了一个比较 严重的安全问题:JWT中允许设置加密方法『alg』为none,这样签名信息可设置为””,这样就给恶意用户伪造JWT的可能。并且该验证是在验证签名之前(决定签名使用算法),所以在安全实现JWT时需要对验证算法进行可信安全校验。
还有一个问题是JWT本身并不会加密payload中的信息,因此在传递敏感信息时需要单独对数据进行个别处理。
参考连接
- JWT.io http://jwt.io/