jwt对spring cloud进行系统认证和服务鉴权

什么是jwt

(json web token)jwt是一生中用来在网络上声明某种身份的令牌(TOKEN),它的特点是紧凑且自包含并且基于JSON,通过一些常用的算法对包含的主体令牌进行加密,安全性高。它通常有三个部分组成:头令牌(Header)、消息体(Payload)、签名(Signature).Header通常用来声明令牌的类型和使用的算法,Payload主要用来包含用户的一些令牌,Signature部分则是将Base64编码后的Header的Payload进行签名。

在微服务架构下,通常有单独一个服务Auth去管理相关认证,为了安全不会直接让用户访问某个服务,会开放一个入口服务作为网关gateway,只允许外网网关,所有请求首先访问gateway,由gateway将请求路由到各个服务,spring cloud下通常使用zuul来实现网关。

如何实现登录、刷新、注销

1、登录

在验证身份信息后可以使用工具包例如jwt根据用户信息生成token,设置有效时长,最后将token返回给客户端存储即可,客户端只需要每次访问时将token加在请求头里即可,然后在zuul增加一个filter,此filter来过滤请求,如果是登录获取toke则放行,其他的话用公钥解密验证token是否有效。

2、刷新

则需要在生成token时生成一个refreshKey,在登录时和token一并返给客户端,然后由客户端保存定时使用refreshKey和token来刷新获取新的token。为了安全起见,服务器可能需要缓存refreshKey,每次刷新token都将生成新的refreshKey和token,服务器需要将老refreshKey替换,客户端保存新的token和refreshKey来进行之后的访问和刷新。

3、注销

首先在登录时生成token和refreshKey后,需要将token也进行缓存,刷新时更新token缓存,最后对zuulFilter进行优化,在解密时先从缓存中查找token是否存在,如果没有直接拒绝,如果有再解密验证有效时长。在注销时只需要删除缓存 的token记录就好。

猜你喜欢

转载自blog.csdn.net/CHS007chs/article/details/83539474