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



Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐