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

原文地址:https://www.cnblogs.com/pengzhen/p/6944488.html