新年好~
最近一直比较忙~新年第一篇文章来简单说下JWT
JWT(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
的简单使用了~