【SSO】单点登录的实现原理

子系统的统一认证交给SSO来解决,这样可以实现一处登录后,登录其他系统后就不需要再次输入账号密码。下面记录一下自己的实现逻辑,代码以后有空补充。

设置全局拦截器

在子系统上设置全局拦截器,排除登录相关的请求,其他请求都需要检查登录信息。将请求信息(主要是session,请求request和你认为必要的参数信息)发送到SSO系统,由SSO系统统一处理。至于怎么访问SSO系统,可以配置url来指定SSO系统的API,或者运用微服务的springcloud or dubbo的方式来实现。检查的信息为session中的两个值:

  • token:登录时生成的随机字符串。
  • timestamp:登录时的时间戳。

检查方式

首先检查是否有token,如果不存在,说明没有登录过,需要登录,返回需要登录的消息让拦截器告知其重定向。
存在token,再检查timestamp,这里需要设置一个登录有效期,比如说半小时,那么取当前的时间来减去时间戳,得到的差和半小时比较,超过半小时那么就是登录超时,也返回需要登录的消息,如果没有半小时,那么就是在登录状态,可以进行下一步操作,拦截器放行。

免登录的实现

在后台调试的时候,有时候需要测试一些接口功能,若是已经有登录拦截,那么会很痛苦。所以有时候可以设置一个特殊的值来实现免登录操作,相当于开了一个后门。
简单的就是在配置中加一个参数,是否需要检查登录。将这个加入到请求中发送到SSO中,当SSO检查这个参数为你设置的不需要登录的值时,直接返回无需登录的报文,反之检查。这样就行了。

SSO拓展功能

如果SSO系统只是检查登录,那么这个系统功能就太简单了,可以增加角色功能的权限控制,再加上可以前端配置的可视化界面就更好了。

猜你喜欢

转载自blog.csdn.net/coldfireman/article/details/79869441