JWT是什么
JWT(JSON Web Token), 顾名思义就是可以在Web上传输的token,这种token是用JSON格式进行format的。它是一个开源标准(RFC 7519),定义了一个紧凑的自包含的方式在不同实体之间安全的用JSON格式传输信息。紧凑:意味着size小,所以可以在URL中,Header中,Post parameter中进行传输。自包含:里边的信息包含了所有需要的信息
JWT(JSON Web Token), 顾名思义就是可以在Web上传输的token,这种token是用JSON格式进行format的。它是一个开源标准(RFC 7519),定义了一个紧凑的自包含的方式在不同实体之间安全的用JSON格式传输信息。
紧凑:意味着size小,所以可以在URL中,Header中,Post parameter中进行传输。
自包含:里边的信息包含了所有需要的信息,不需要再取数据库中取其它信息。
JWT可以用在什么地方呢?比如说authentication,用户登录后可以issue一个JWT token, Single Sign On也可以使用JWT,因为它小,所以可以很容易在不同的域名下传输,比如通过URL。
那么JWT的格式是什么样子的呢?分成三部分,每部分用“点”分割。
Header.Payload.Signature
第一部分是header信息,包含两部分:一种是type,就是JWT, 另一种是algorithm,可以是HMAC sha256或者是RSA。然后用base64Url进行编码。
{
"alg": "HS256"
"typ": "JWT"
}
第二部分是payload信息,包含claim,claim就是一个包含用户和他的相关信息的声称。
第三部分是签名信息,是这样计算的:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
那么怎么安全的传输这个信息呢?无外乎要解决两个问题:
1 信息不能被其它人窃取,所以需要用加密解密来解决,不管是RSA还是对称加密方法都可以。
2 信息本身不能被篡改,这个需要用数字签名来解决。
JWT标准只解决了第二个问题,对于第一个问题,JWT只是用base64编码了一下,并没有加密,所以第一个问题需要应用自己去解决,也就是说JWT里不能含有敏感信息,比如用户的原始密码,信用卡号等。
原文:http://blog.csdn.net/hongchangfirst/article/details/52622675
作者:hongchangfirst
hongchangfirst的主页:http://blog.csdn.net/hongchangfirst
更多推荐
所有评论(0)