JWT简介
JWT简介
MoonSugar 发表于1年前
JWT简介
  • 发表于 1年前
  • 阅读 77
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: WT的全称是JSON Web Token, 它是一个开放的标准,定义了了一个紧凑和自包含(self-contained)的方法在端与端之间安全的传输JSON信息。传输的JSON信息因为经过了数字签名,因而可以被验证与信息。

#什么是JWT

>JWT的全称是JSON Web Token, 它是一个开放的标准,定义了了一个紧凑和自包含(self-contained)的方法在端与端之间安全的传输JSON信息。传输的JSON信息因为经过了数字签名,因而可以被验证与信息。

**紧凑性: JWT的长度很小,因此可以通过URL、POST参数,HTTP消息头进行传输。 ** 自包含性: JWT的payload中包含了关于用户所需的信息, 避免了数据库查询。

#JWT的通途 授权信息交换

#JWT的结构 JWT有三个部分组成,并由点号(.)连接在一起。

  • Header
  • Payload
  • Signature 形如: > xxxxx.yyyyy.zzzzz

Header

Header本身是一个JSON字符串,它有两个值组成,第一个叫‘typ’,它标识token的类型,默认为“JWT”;第二个叫‘alg’,它标识JWT使用的哈希算法,例如,HMAC, SHA256, RSA等。

{
    "typ": "JWT",
    "alg": "HS256"
}

然后用Base64Url对JSON进行编码。

##Payload Payload部分包含了所有的声明(claim),声明是对某个实体或者或者附加的元数据的描述语句,

保留声明

JWT规范中包含了7个保留声明:

  • iss(issuer): token的签发方,通常为认证服务器,它的值可以是普通的字符串或者是URI。
  • sub(subject): 被认证方的信息,通常为登录用户的相关信息。
  • aud(audience): 用来表示JWT的接受方,它可以是一个字符串数组。
  • exp(expiration time): 时间戳,并且当前时间必须在exp时间之前,当当前时间超过exp时间之后,服务器不再接受该JWT。
  • nbf(Not Before): 时间戳,表示在该时间点之前,服务器不接受该Token。
  • iat(Issued At): 时间戳,Token的签发时间。
  • jti(JWT ID): 大小写敏感的字符串,用于唯一标识当前token。 其中,iss、sub和aud的值都是大小写敏感的。

公共声明

私有声明

Payload需要用Base64Url进行编码。

##Signature 签名是由以上两个部分由点号连接起来之后,有加密算法生成签名字符串。

最终将这三部分组合在一起,生成最终的JWT。

#JWT存储方式 JWT可以保存在HTML5 Web Storage中也可以保存在Cookie中,一下对比这两种方式的不同。

Web StorageCookie
利用JS代码,从响应中取出JWT,存入 Web Stroage中通过set-cookie 自动存入 cookie中
可自定义每次请求是否要添加JWT到报文头中每次请求都会携带JWT
由于同一个domain下的js脚本都可以读取 Web Stroage,所以容易受到Cross-site scripting (xss) 攻击。通过添加HttpOnly可以阻止js脚本从Cookie中读取JWT,防止xss攻击。但是该方法容易收到CSRF攻击,解决方法包括 检查 Head中的Referer/Origin字段,和添加检验token等
共有 人打赏支持
粉丝 0
博文 12
码字总数 20196
×
MoonSugar
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: