JWT 介绍
JSON Web令牌(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于在各方之间作为JSON对象安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。JWTS可以使用秘密(使用HMAC算法)或公钥/私钥对使用RSA或ECDSA来签名。
虽然JWTS可以加密,但也提供保密各方之间,我们将重点放在签名令牌。签名的令牌可以验证包含在其中的声明的完整性,而加密的令牌隐藏这些声明以防其他各方。当令牌使用公钥/私钥对签名时,签名也证明只有持有私钥的方才是签名的方。
使用 JWT 包含三部分的信息,分别为头部信息,载荷信息,签名信息
1.头部信息
头部信息 JSON 代码如下:
{
"alg": "HS256",
"typ": "JWT"
}
- typ :令牌的类型,即 JWT;
- alg:使用的算法,HS256加密算法
2.载荷信息
其中包含声明(claims),声明可以存放实体(通常是用户)和其他数据的声明,声明包括3种类型
- 已注册声明 :这些是一组预定义声明,不是强制性的,但建议使用,以提供一组有用的,可互操作的声明;
- 公开声明:对JWT的一些公开的声明,具体查看令牌注册表;
- 私有声明:根据根据自己的业务需要自定义的一些数据格式:
{
"uid": "123456",
"name": "tom"
}
3.签名信息
这个部分需要 base64 加密后的 头部信息(header) 和 base64 加密后的载荷信息(payload),使用连接组成的字符串,然后通过头部信息(header)中声明的加密方式进行加盐 secret 组合在加密,然后就构成了 JWT 的第三部分。
JWT 简单实用演示
打开网址 https://jwt.io/ 可以对JWT进行练习操作:
图中三个部分分别所对应的就是上文中所提到的头部信息,载荷信息,签名信息。使用HS256进行加密,左边是对信息加密编码所得出的JWT。