Json Web Token
JWT符合[RFC 7519]规范,它的优势在于能够取代Session和Cookie验证的方式。属于Token-Based的范畴。
1. JWT的三段組成解析
header(头部).payload(载荷).signature(签名)
注:三个部分之间用英文句号.来分隔。
1.2 header
{
"typ": "JWT", #类型,表明是一个JWT字符串
"alg": "HS256" #加密算法
}
编码后:
ewogICAgInR5cCI6ICJKV1QiLAogICAgImFsZyI6ICJIUzI1NiIKfQ==
一般Header只需要这两个字段即可。
1.2_payload(关键的自带信息)_
{
"user_id":pzdn2009, #用戶Id,
"name":"pzdn", #名称
"exp":1556999524 #token過期時間
}
编码后:
ewogICAgInVzZXJfaWQiOnB6ZG4yMDA5LCAKICAgICJuYW1lIjoicHpkbiIsIAogICAgImV4cCI6MTU1Njk5OTUyNCAKfQ==
payload用来承载要传递的数据,它的json结构实际上是对JWT要传递的数据的一组声明,这些声明被JWT标准称为claims,它的一个“属性值对”其实就是一个claim,每一个claim的都代表特定的含义和作用。
1.3_signature_
计算signature:
HMACSHA256(base64(header)+"."+base64(payload),secret="mypasswordsdfasdfsddfjjcud")
最终header.payload.signature连成一串,就是JWT。
1.4 说明
- nbf 定义在什么时间之前,该jwt都是不可用的.
- exp 过期时间
- iss issuer 签发者
- aud audience 听众,可以是scope,或者/resoures,表示接收jwt的一方
- sub subject 主题,jwt所面向的用户
- jti jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
- iat jwt的签发时间
2. token应用流程?
- Login:用户初次登录,输入用户名密码
- 密码验证:服务器从数据库取出用户名和密码进行验证
- 生成JWT:服务器端验证通过,根据从数据库返回的信息,以及预设规则,生成JWT
- 返还JWT:服务器的HTTP RESPONSE中将JWT返还
- 带JWT的请求:以后客户端发起请求,HTTP REQUEST HEADER的Authorizatio字段带上JWT,或者URL后面带上JWT
3. .NET 库
官方:https://jwt.io/#libraries-io
4 .参考文献
[基于Token的身份验证——JWT]http://www.cnblogs.com/zjutzz/p/5790180.html
[~3种web会话管理的方式]http://www.cnblogs.com/lyzg/p/6067766.html#_label2