Jwt简术

JWT

什么是JWT

官网里能够看到,JWT是一个开放协议,它以一个可靠的,独立的方式方便在各方之间以Json的方式传输数据。Jwt能够使用秘钥(HMAC算法)或者公钥/私钥(RSA or ECDSA)的方式进行签名html

应用场景

受权

经常使用如登陆,登陆成功后返回JWT,后续请求都会带上这个JWT,好比SSO算法

信息交换

使用公钥/私钥对签名时,能够在不一样对象间传输信息跨域

JWT结构

一个典型的JWT格式以下:编码

xxx.yyy.zzz

能够看到JWT由三部分组成,不一样部分用.结合起来加密

  • Header
  • Payload
  • Signature

Header

Header格式以下:翻译

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

alg表示所使用的算法,如HMAC,SHA256, RSA
typ表示token类型,也就是 JWT
Header通过base64编码后会成为JWT的第一部分code

Payload

Payload包含了一些Claims,Claims里又包含了实体和额外信息,有三种类型的Claimsjwt

  • registered
  • public
  • private

一个典型的Payload以下:htm

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

registered Claim

registered Claim是预约义的声明,不强制但建议使用,在RFC7519里能够看到,预约义的声明有如下几种对象

  • iss ((Issuer) Claim)
  • sub ((Subject) Claim)
  • aud ((Audience) Claim)
  • exp ((Expiration Time) Claim)
  • nbf ((Not Before) Claim)
  • iat ((Issued At) Claim)
  • jti ((JWT ID) Claim)

public Claim

public Claim是用户能够自定义的,可是为了不使用冲突,应该遵循IANA JSON Web Token Registry 规范,

private Claim

private Claim就是用来存贮交换信息的部分

Payload通过base64编码后就成为了JWT的第二部分

Signature

将编码后的Header和Payload组合在一块儿,再加上secret,通过指定的算法加密就造成了JWT的第三部分

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

最后用.号串联起来,最终就生成了一个JWT token

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.b21wYW55X2lkIjoiZWQ5OGE4YTMtMWMyNi00OTM5LTg0MDQtMjU0OGUyMjgzOWVmIn0sImV4cCI6MTU2NzEzNzg0NywianRpVtIn0.sAlzke31nRGU_Gh_Ux8uh9uKmCnSYgQTk02GYzE97sU

使用方法

Authorization: Bearer <token>

优势

  • 跨域
  • 比XML结构简单,小巧
  • 跨平台
  • 相比Session,无需落地存储

英文版在这儿,这里是我理解翻译过来的
原地址

相关文章
相关标签/搜索