在单点登录下实现用户登录鉴权
使用除非大公司,一般不会用session而是用token的方式实现鉴权(为什么?简单讲就是session在分布式系统下多台服务器之间要做到共享session数据需要的成本很大,而无状态的token,不需要多台服务器去维护状态,就是便宜),jwt是token的一种安全的实现方式,无感刷新就是指用户不会感知到token的刷新,一般使用双token实现,双token分别是access_token(访问令牌)和refresh_token(刷新令牌),用户在登录成功后授权服务器会返回这两个token,access_token过期时间短,refresh_token时间长。
无感知登录刷新
客户端每次请求资源服务器都携带access_token,如果access_token过期了,就用refresh_token请求授权服务器,如果refresh_token没过期就重新签发access_token和refresh_token,如果过期就重新登录。
更高安全性控制
这是相对于单token而言的。因为access_token过期短,在比较短的时间内用户就会来获取新的access_token,这个过程就可以做很多逻辑判定,比如说这个用户犯了什么事,我们要封禁他的权限,只需要在他来刷新access_token的时候不给就可以了。
单token不能完成无感刷新?
可以,但双token更安全。
单token实现无感刷新的过程及弊端:
每次请求资源服务器,同时请求授权服务器来获得新的token,但是如果用户下线了,而用户的令牌只有7天的有效期,那用户在7天后上线就需要重新登录,这就不满足无感刷新了,当然可以把有效期设置的更久,但是那样的话如果token被人截获,他能使用这个token的时间就越久。而且access_token是每次请求都会带的,有很大概率被中间人截获,安全性低。
双token为什么更安全
双token下access_token有效期设置得比较短,只要refresh_token不被截获,就算access_token被截获,那能使用的时间也很短,而且refresh_token只有在access_token过期的时候才会被使用,它被截获的概率就小,因此而refresh_token设置的过期时间很长也没什么问题。