Json web token:
- 概念:
JWT是json web token缩写。可以使⽤在RESTFUL接⼝定义,也可以使⽤在普通的web。它将⽤户信息加密到token⾥,服务器不保存任何⽤户信息。服务器通过使⽤保存的密钥验证token的正确性,只要正确即通过验证。 - 组成:
JWT包含三个部分: Header头部,Payload负载和Signature签名。由三部分⽣成token,三部分之间⽤“.”号做分割。 列如 :
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.Sf
- Header(头) 作用:记录令牌类型、签名算法等 例如:{“alg":“HS256”,“type”,"JWT}。
- Payload(有效载荷)作用:携带一些用户信息 例如{“userId”:“1”,“username”:“sungan”}
- Signature(签名)作用:是一个计算出来的签名字符串,防止 Token被篡改、确保安全性 例如 使⽤的是HMACSHA256算法,⼤致流程类似于: HMACSHA256( base64UrlEncode(header) + “.” + base64UrlEncode(payload), secret)这个signature字段被⽤来确认JWT信息的发送者是谁,并保证信息没有被修改 。
- 验证流程:
- 在头部信息中声明加密算法和常量,然后把header使⽤json转化为字符串
- 在载荷中声明⽤户信息,同时还有⼀些其他的内容,再次使⽤json把在和部分进⾏转化,转化为字符串
- 使⽤在header中声明的加密算法来进⾏加密,把第⼀部分字符串和第⼆部分的字符串结合和每个项⽬随机⽣成的secret字符串进⾏加密,⽣成新的字符串,此字符串是独⼀⽆⼆的。
- 解密的时候,只要客户端带着jwt来发起请求,服务端就直接使⽤secret进⾏解密,解签证解出第⼀部分和第⼆部分,然后⽐对第⼆部分的信息和客户端穿过来的信息是否⼀致。如果⼀致验证成功,否则验证失败。
- 特点:
三部分组成,每⼀部分都进⾏字符串的转化