JWT
json web token 解决前后端分离的认证问题,其实还是一种session
,只不过这种session并不在服务端存储,而是在客户端存储
基本原理
服务端认证生成二段json,然后对json按设定的加密方法进行加密,然后返回给前端,服务器是无状态的
数据结构
有3个部分, header+payload+signature,官网例子,下图的红色部分是header,紫色是payload存储数据的部分,蓝色是加密的签名认证部分
- header部分,对json字符串进行base64Url加密,内容
{
"alg": "HS256", //加密算法
"typ": "JWT"//可以省略
}
- payload部分,实际传递的数据,也是json字符串base64Url加密,可以自定义
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
不能把私密或者重要的信息放到这里,因为这里信息是可以随便加密解密的
3. signature部分,签名认证部分,有前2部分base64Url加密之后的信息,加上自己的secret,按照第一部分的设定的加密算法,得到一个签名
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
your-256-bit-secret
)