6.3JWT令牌
6.3.1JWT介绍
通过前面文章的提到的,当资源服务器与授权服务器不在一起时,资源服务使用RemoteTokenServices远程请求授权服务验证token,如果访问量较大将会影响系统的性能。
解决上面的问题:
令牌采用JWT格式即可解决上面的问题,用户认证通过会得到一个JWT令牌,JWT令牌中已经包括了用户相关的信息,客户端只要携带JWT访问资源服务,资源服务等根据事先约定的算法自行完成令牌校验,无需每次都请求认证服务完成授权。
1、什么是JWT?
JSON Web Token(JWT),是一个开放的行业标准(RFC7519),它定义了一种简介的,自包含的协议格式,用于在通信双方传递json对象,传递的信息经过数字签名可以被验证和信任。JWT可以使用HMAC算法或使用RSA的公钥/私钥对来签名,防止被篡改。
JWT令牌的优点:
- JWT基于JSON,非常方便解析;
- 可以在令牌中自定义丰富的内容,易扩展;
- 通过非对称加密算法及数字签名技术,JWT防止篡改,安全性高。
- 资源服务使用JWT可不依赖认证服务即可完成授权。
缺点:
- JWT令牌较长,占存储空间比较大。
2、JWT令牌结构
JWT令牌由三部分组成,每部分中间使用点 . 分隔,比如:xxxx.xxxx.xxxx
- Header:
头部包含令牌的类型(即JWT)及使用的哈希算法(如HMAC SHA256或R5A)
一个例子如下:
下面是Header部分的内容:
{
"alg":"HS256",
"typ":"JWT"
}
将上面内容使用Base64Url编码,得到一个字符串就是JWT令牌的第一部分。
- Payload
第二部分是负载,内容也是一个JSON对象,它是存放有效信息的地方,它可以存放JWT提供的现成字段,比如:iss(签发者)、exp(过期时间戳)、sub(面向的用户)等,也可自定义字段。
一个例子:
{
"sub":"123456",
"name":"789",
"admin":"true"
}
- Signature
第三部分是签名,此部分用于