JWT(JSON Web Tokens)
Posted 在修行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)的主要内容,如果未能解决你的问题,请参考以下文章