jwt与session区别
Session的状态是存储在服务器端,客户端只有session id;而Token的状态是存储在客户端 ,所有的区别都是基于此。
JWT是什么
JWT就是一个字符串,经过加密处理与校验处理的字符串,形式为:
A.B.C = header(头部).poyload(负荷).sign(签名)。
A由JWT头部信息header加密得到
B由JWT用到的身份验证信息json数据加密得到
C由A和B加密得到,是校验部分
怎样生成A
header格式为:
{
"typ": "JWT",
"alg": "HS256"
}
它就是一个json串,两个字段是必须的,不能多也不能少。alg字段指定了生成C的算法,默认值是HS256
将header用base64加密,得到A
通常,JWT库中,可以把A部分固定写死,用户最多指定一个alg的取值
怎样计算B
{
"iss": "John",
"iat": 1441593502,
"exp": 1441594722,
"aud": "",
"sub": "",
"from_user": "B",
"target_user": "A"
}
这里面的前五个字段都是由JWT的标准所定义的。
iss: 该JWT的签发者
sub: 该JWT所面向的用户
aud: 接收该JWT的一方
exp(expires): 什么时候过期,这里是一个Unix时间戳
iat(issued at): 在什么时候签发的
这些定义都可以在标准中找到。
将上面的JSON对象进行[base64编码]可以得到字符串B。
怎样计算C
将上面的两个编码后的字符串都用句号.连接在一起(头部在前),上面拼接完的字符串用HS256算法进行加密,算法是在header中定义的。在加密的时候,我们还需要提供一个密钥(secret)。如果我们用mystar作为密钥的话,那么就可以得到我们加密后的内容C.