新年好~
最近一直比较忙~新年第一篇文章来简单说下JWTJWT(JSON Web Token)是一个开放标准(RFC 7519),被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。
JWT的使用场景:
1、授权,一旦用户登录后,每个后续的请求都会包含一个JWT,可以用来验证用户的身份,以及对路由,服务和资源的访问。
2、信息交换:由于使用了标头和有效负载计算签名,可以确保发送者的数据是么有被伪造过的。
JWT的组成
JWT使用'.'分隔的三部分就像这样:xxxxx.yyyyy.zzzzz
结构就像这样
- Header
- Payload
- Signature
Header
head部分一般是JWT的声明类型和算法像这样:
{
"alg": "HS256",
"typ": "JWT"
}
payload:
令牌的第二部分是有效负载,一般有三种类型:
- 标准中注册的声明
- 公共的声明
- 私有的声明
像下面这样:
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
Signature
其中sub指的是接收JWT的一方,然后还会包含一些其他的信息:例如名称等等
签名:JWT的最后一部分就是签名了,主要包括三部分:
- the encoded header (base64之后的)
- the encoded payload (base64之后)
- secret
这三部分就是经过base64加密后的header和payload然后通过header中的加密方式进行加盐secret组合加密。
然后上面三部分其实就是下面这段字符串的组合
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
JWT的工作流程
用户通过登录页,进行登录。
服务端通过登录鉴权,如果用户合法,根据用户的信息和规划返回
JWT。把生成的
Token返回给用户。
4.用户在以后受保护的请求中,都会在请求头中加入Authorization: Bearer xxxx(token)。
5.服务器端对此token进行验证看是否合法,返回结果。
6.用户接收返回结果。
如何应用JWT
一般是在请求头中加入Authorization,并加上Bearer标注
fetch('api/getUser/1', {
headers: {
'Authorization': 'Bearer ' + token
}
})
以上就是JWT的简单使用了~