Java的JSON Web令牌

一、什么是JWT

JWT是一种以紧凑,可验证的形式在两方之间传输信息的方法
在JWT主体中编码的信息位称为 claims。JWT的拓展形式为 JSON格式,因此每个 claim 都是JSON 对象中的键
JWT 可以被加密签名(使其成为JWS)或被加密(使其成为JWE)
这为JWT的用户增加了一层强大的可验证性。接收者具有高度的信心,例如可以通过验证签名来篡改JWT。

二、JWT的组成形式

签名的 JWT的紧凑形式是一个字符串,该字符串包含三个部分,每个部分中间都有一个 <mark>.</mark>

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJKb2UifQ.ipevRNuRP6HflG8cFKnmUPtypruRC4fb1DWtoLL62SY

每个部分都是Base64URL 编码 的。整体分为三个部分:

  1. 标头 :至少指定用于签署 JWT的算法
  2. 正文:这个部分包含了此JWT的所有声明
  3. 签名 :通过标头和正文的组合,通过标头中指定的算法传递来计算的

如果将前两部分通过基本的64位url解码器传递,则会得到以下内容(为清楚起见添加了格式):

header:

	{
	 	"alg":"HS256"
	}

body:

	{
	 	"sub":"Joe"
	}

在这种情况下,我们得到的信息是使用 SHA-256算法的HMAC被用来对 JWT进行签名。而且,主体具有 sub价值的单一主张 Joe
要计算签名,需要一个密钥对其进行签名。