JWT系列之基本概念

术语

JWT:JSON Web Token
JWS:JSON Web Signature
JWE:JSON Web Encryption
JWK:JSON Web Key
JWA:JSON Web Algorithms

概念

官网介绍:

JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed. JWTs can be signed using a secret (with the HMAC algorithm) or a public/private key pair using RSA or ECDSA.
Although JWTs can be encrypted to also provide secrecy between parties, we will focus on signed tokens. Signed tokens can verify the integrity of the claims contained within it, while encrypted tokens hide those claims from other parties. When tokens are signed using public/private key pairs, the signature also certifies that only the party holding the private key is the one that signed it.

简单说,JWT就是一个标准,用于在双方交换数据时的身份认证。

结构

JWT由三部分组成(Header、Payload、Signature),彼此之间用英文句号(.)分割,如下:

{Header}.{Payload}.{Signature}

Header

头部一般包含两部分内容(有的实现框架已经赋予默认值,所以代码中可以不写):

  1. Token的类型,如 { “typ" : “JWT” }
  2. 签名算法,如 { “alg” : “HS256” }

完整示例:

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

备注:JWT中所有Json数据的Key都只保留3位,JWT提倡紧凑的结构。

Payload

真正的数据部分,所有有用的数据都放在这里,分三种类型的声明(claims):

  1. registered claims:预定义声明,推荐使用,如下:

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)

  1. public claims:用户自定义
  2. private claims:与第三方交换的数据

一个完整的实例:

{
  "sub": "hi jwt",
  "name": "wdy",
  "admin": true
}

虽然JWT会被加密,但是这部分内容任何人都可以读取,所以不要存放机密信息

Signature

签名部分,用于保护JWT的完整性。
这部分在生成时,依赖以下部分:

  1. 加密的Header
  2. 加密的Payload
  3. 一个秘密
  4. 最后用Header中指定的算法对整体加密

实例:

HMACSHA256( base64UrlEncode(header) + “.” + base64UrlEncode(payload), secret )

最后,看一个完整的JWT实例:
来自官方的图片

— 红色部分是加密后的Header
— 紫色部分是加密后的Payload
— 蓝色部分是签名
这三部分用英文句号连接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值