Json Web Token(JWT)
JSON Web Token(JWT)
是一个非常轻巧的规范。这个规范允许我们使用 JWT
在两个组织之间传递安全可靠的信息。
官方定义:JSON Web Token (JWT) is a compact URL-safe means of representing claims to be transferred between two parties
JWT Auth
现在网上大多数介绍 JWT
的文章实际介绍的都是 JWS(JSON Web Signature)
,也往往导致了人们对于 JWT
的误解,但是 JWT
并不等于 JWS
,JWS
只是 JWT
的一种实现,除了 JWS
外,JWE(JSON Web Encryption)
也是 JWT
的一种实现。
JWT、JWS 与 JWE
下面就来详细介绍一下 JWT
与 JWE
的两种实现方式:
JSON Web Signature(JWS)
是一个有着简单的统一表达形式的字符串:
JWS/JSON Web Signature 组成
1) 头部(Header)
头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。
JSON内容要经Base64 编码生成字符串成为Header。
2) 载荷(PayLoad)
payload的五个字段都是由JWT的标准所定义的。
- iss: 该JWT的签发者;
- sub: 该JWT所面向的用户;
- aud: 接收该JWT的一方;
- exp(expires): 什么时候过期,这里是一个Unix时间戳;
- iat(issued at): 在什么时候签发的;
后面的信息可以按需补充。
JSON内容要经 Base64 编码生成字符串成为负载/PayLoad。
3) 签名(signature)
这个部分 header
与 payload
通过 header
中声明的加密方式,使用密钥 secret
进行加密,生成签名。
JWS
的主要目的是保证了数据在传输过程中不被修改,验证数据的完整性。但由于仅采用 Base64
对消息内容编码,因此不保证数据的不可泄露性。所以不适合用于传输敏感数据。
JSON Web Encryption(JWE)
相对于 JWS
,JWE
则同时保证了安全性与数据完整性。
JWE
由五部分组成:
JWE/JSON Web Encryption 组成
具体生成步骤为:
JOSE
含义与JWS
头部相同;- 生成一个随机的
Content Encryption Key(CEK)
; - 使用
RSAES-OAEP
加密算法,用公钥加密CEK
,生成JWE Encrypted Key
; - 生成
JWE
初始化向量; - 使用
AES GCM
加密算法对明文部分进行加密生成密文Ciphertext
,算法会随之生成一个128
位的认证标记Authentication Tag
; - 对五个部分分别进行
base64
编码;
可见,JWE
的计算过程相对繁琐,不够轻量级,因此适合与数据传输而非 token
认证,但该协议也足够安全可靠,用简短字符串描述了传输内容,兼顾数据的安全性与完整性。
【转载声明】