赞
踩
使用token一般的身份验证流程:
Jwt就是一个token的具体实现方式,即:JSON Web Token, 官网地址:https://jwt.io/
JWT由3部分组成:标头(Header)、有效载荷(Payload)和签名(Signature)。在传输的时候,会将JWT的3部分分别进行Base64编码后用.
进行连接形成最终传输的字符串
官网图
JWT头是一个描述JWT元数据的JSON对象,alg属性表示签名使用的算法,默认为HMAC SHA256(写为HS256);typ属性表示令牌的类型,JWT令牌统一写为JWT。最后,使用Base64 URL算法将上述JSON对象转换为字符串保存
有效载荷部分,是JWT的主体内容部分,也是一个JSON对象**,包含需要传递的数据。 JWT指定七个默认字段供选择
iss:发行人
exp:到期时间
sub:主题
aud:用户
nbf:在此之前不可用
iat:发布时间
jti:JWT ID用于标识该JWT
这些预定义的字段并不要求强制使用。除以上默认字段外,我们还可以自定义私有字段,一般会把包含用户信息的数据放到payload中,如下例:
{
"sub": "1234567890",
"name": "什么是快乐",
"admin": true
}
当然要注意的是:
JWT 默认的加密只是通过base64转换,所以拿到JWT后就可以转换原本的JSON数据,所以不能把一些敏感数据放在JWT中,如用户密码等,JWT只是适合在网络中传输一些非敏感的信息
签名哈希部分是对上面两部分数据签名,需要使用base64编码后的header和payload数据,通过指定的算法生成哈希,以确保数据不会被篡改。首先,需要指定一个密钥(secret)。该密码仅仅为保存在服务器中,并且不能向用户公开。然后,使用header中指定的签名算法(默认情况下为HMAC SHA256)根据以下公式生成签名
H
M
A
C
S
H
A
256
(
b
a
s
e
64
U
r
l
E
n
c
o
d
e
(
h
e
a
d
e
r
)
+
"
.
"
+
b
a
s
e
64
U
r
l
E
n
c
o
d
e
(
p
a
y
l
o
a
d
)
,
s
e
c
r
e
t
)
HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)
HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)
在计算出签名哈希后,JWT头,有效载荷和签名哈希的三个部分组合成一个字符串,每个部分用.
分隔,就构成整个JWT对象
注意JWT每部分的作用,在服务端接收到客户端发送过来的JWT token之后:
- header和payload可以直接利用base64解码出原文,从header中获取哈希签名的算法,从payload中获取有效数据
- signature由于使用了不可逆的加密算法,无法解码出原文,它的作用是校验token有没有被篡改。服务端获取header中的加密算法之后,利用该算法加上secretKey对header、payload进行加密,比对加密后的数据和客户端发送过来的是否一致。注意secretKey只能保存在服务端,而且对于不同的加密算法其含义有所不同,一般对于MD5类型的摘要加密算法,secretKey实际上代表的是盐值
因为token 有时效性,一些需求是:只要用户在一段时间内做了操作,token过期时间可以延长
个人小站:什么是快乐
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。