JWT介绍

JWT是什么

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中的信息,因此在传递敏感信息时需要单独对数据进行个别处理。

参考连接

  1. JWT.io http://jwt.io/

转自:http://ipfans.github.io/2015/08/jwt-basic/