Java的JSON Web令牌
一、什么是JWT
JWT是一种以紧凑,可验证的形式在两方之间传输信息的方法
在JWT主体中编码的信息位称为 claims。JWT的拓展形式为 JSON格式,因此每个 claim 都是JSON 对象中的键
JWT 可以被加密签名(使其成为JWS)或被加密(使其成为JWE)
这为JWT的用户增加了一层强大的可验证性。接收者具有高度的信心,例如可以通过验证签名来篡改JWT。
二、JWT的组成形式
签名的 JWT的紧凑形式是一个字符串,该字符串包含三个部分,每个部分中间都有一个 <mark>.</mark>
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJKb2UifQ.ipevRNuRP6HflG8cFKnmUPtypruRC4fb1DWtoLL62SY
每个部分都是Base64URL 编码 的。整体分为三个部分:
- 标头 :至少指定用于签署 JWT的算法
- 正文:这个部分包含了此JWT的所有声明
- 签名 :通过标头和正文的组合,通过标头中指定的算法传递来计算的
如果将前两部分通过基本的64位url解码器传递,则会得到以下内容(为清楚起见添加了格式):
header:
{
"alg":"HS256"
}
body:
{
"sub":"Joe"
}
在这种情况下,我们得到的信息是使用 SHA-256算法的HMAC被用来对 JWT进行签名。而且,主体具有 sub价值的单一主张 Joe
要计算签名,需要一个密钥对其进行签名。