什么是JWT(JSON Web Tokens)?
-
JWT(JSON Web Token)是一个非常轻巧的规范,允许我们使用JWT在用户和服务器之间传递安全可靠的信息。
为什么冒出个JWT(JSON Web Tokens)?有什么用,解决什么问题?
传统session、cookies有以下明显的缺点:
a、cookies的安全性不好,攻击者可以通过获取本地cookies进行欺骗或者利用cookies进行CSRF攻击。
b、使用cookies时,在多个域名下,会存在跨域问题。
c、session在一定的时间里,需要存放在服务端,因此当拥有大量用户时,也会大幅度降低服务端的性能。
d、多服务器时需要共享session。
2. 为了解决这些问题,JWT出现了。它不再有session、cookies上面列举的缺点,不易被攻击者利用,安全性提高了。利用Http传输token,没有跨域问题。信息分散存储在客户端,服务端占用资源变少,也就不存在session共享问题。
JWT(JSON Web Tokens)是如何工作的?
要了解工作原理,我们先看下JWT的组成结构
JWT实际上是一个字符串,由三部分组成,头部(HEADER)、载荷(PAYLOAD)、签名(VERIFY SIGNATURE)。
头部
头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。
{
"alg": "HS256",
"typ": "JWT"
}
这是一个头部样例,描述了token的类型为JWT,使用的算法是HS256
载荷
载荷用于存储数据,可以包含JWT标准字段,也可以自定义。列举几个标准字段以及含义:
iss: JWT的签发者
sub: JWT所面向的用户
aud: 接收JWT的一方
exp(expires): 什么时候过期
iat(issued at): 什么时候签发
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
这就是一个载荷样例,有3个字段,意思是:在这个1516239022(Unix时间戳)签发的包含name=John Doe的token发送给1234567890用户。
签名
对头部和载荷编码连接内容使用加密算法进行加密,加密过程使用特定秘钥。
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
) secret base64 encoded
2.JWT的工作流程:
客户端使用账户密码登录
登录成功后服务端返回JWT
客户端再次请求其他时带上JWT
服务端接收到JWT后验证签名的有效性。
閱讀更多 Lucif墮落天使 的文章