首页 > 代码库 > JWT(JSON Web Tokens)

JWT(JSON Web Tokens)

1.JWT即JSON Web Tokens,他可以用来安全的传递信息,因为这些信息是经过数字签名的

2.JWT可以使用一种加密算法比如HMAC 算法,也可以使用公钥/私钥的非对称算法

3.因为JWT签名后的信息够短,可以放在url里、request body里、http header里,传输够快。

4.荷载信息里包含所有你想要的,避免不止一次的去查询数据库

5.JWT的使用场景主要包括:

  1) 认证,这是比较常见的使用场景,只要用户登录过一次系统,之后的请求都会包含签名出来的token,通过token也可以用来实现单点登录。

  2)交换信息,通过使用密钥对来安全的传送信息,可以知道发送者是谁、放置消息被篡改。

6.JSON Web Tokens由三部分组成,用英文句点分割(.) ,一般看起来例如:xxxxx.yyyyy.zzzzz

分为:

  • Header  头信息
  • Payload  荷载信息,实际数据
  • Signature  由头信息+荷载信息+密钥 组合之后进行加密得到

  1) Header 头信息通常包含两部分,type:代表token的类型,这里使用的是JWT类型。 alg:使用的Hash算法,例如HMAC SHA256或RSA.

{  "alg": "HS256",  "typ": "JWT"}
// 这会被经过base64Url编码形成第一部分

  2)Payload  一个token的第二个部分是荷载信息,它包含一些声明Claim(实体的描述,通常是一个User信息,还包括一些其他的元数据)

    声明分三类:

    1)Reserved Claims,这是一套预定义的声明,并不是必须的,这是一套易于使用、操作性强的声明。包括:iss(issuer)、exp(expiration time)、sub(subject)、aud(audience)等

    2)Plubic Claims,

    3)Private Claims,交换信息的双方自定义的声明

  

{  "sub": "1234567890",  "name": "John Doe",  "admin": true}
// 同样经过Base64Url编码后形成第二部分

  3) signature  使用header中指定的算法将编码后的header、编码后的payload、一个secret进行加密

  例如使用的是HMAC SHA256算法,大致流程类似于: HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

  这个signature字段被用来确认JWT信息的发送者是谁,并保证信息没有被修改

7.这个JSON Web Tokens包含了必要的用户信息,减少了对数据库进行多次查询的需要。

8.由于没有使用Cookies,Cross-Origin Resource Sharing (CORS) ,跨域的资源访问不会成为问题。

 JWT官网有一张图描述了JWT的认证过程:

技术分享

 

JWT(JSON Web Tokens)