jwt对spring cloud进行系统认证和服务鉴权
阅读数:201 评论数:0
跳转到新版页面分类
python/Java
正文
什么是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时生成一个refresh token,在登录时和token一并返给客户端,然后由客户端保存定时使用refresh token和token来刷新获取新的token。为了安全起见,服务器可能需要缓存refresh token,每次刷新token都将生成新的refresh token和token,服务器需要将老refresh token替换,客户端保存新的token和refresh token来进行之后的访问和刷新。
(1)refresh token存在的意义
由于token会伴随每次请求,而refresh token只需要重新刷新token时才传输,所以refresh token的获取难度大于access token获取的难度。
如果access token有效值设置的过长有安全风险,如果设置的过短,用户体验不好,增加refresh token机制,是一种安全性与易用性的平衡。
3、注销
首先在登录时生成token和refresh token后,需要将token也进行缓存,刷新时更新token缓存,最后对zuulFilter进行优化,在解密时先从缓存中查找token是否存在,如果没有直接拒绝,如果有再解密验证有效时长。在注销时只需要删除缓存 的token记录就好。