SSO单点登陆,单点注销设计思想

5、设计思路及折衷

在常见的web站点中,当存在多个站点需要登陆,而这些站点都是使用同一套的登陆流程,

当用户在其中一个站点登陆后,其他站点并未记录用户的登陆信息,导致用户每次登陆新

站点需要进行新的登陆过程,这样给用户的体验是十分的不友好的,这时候就可以使用单点登陆,

单点注销的方式实现用户的登陆流程。

单点登陆设计流程如下图:

SSO单点登陆,单点注销设计思想

由于以上站点是使用session存储用户信息的,所以该设计模式是针对session存储用户信息的设计方式,

首先以上系统1,系统2,sso认证中心都可以当作不同的站点,但是是使用同一套用户体系。为了实现单点

登陆,需要一个站点记录各个站点状态,就是sso认证中心。这存在唯一的登陆入口,就是sso认证中心提供

的登陆地址。当用户访问系统1时,如果系统1判断用户已经登陆,那么直接访问系统1站点内的资源,如果用户未登录

则请求到sso认证中心,判断认证中心,用户是否登陆。

一:如果认证中心记录用户已经登陆,则将登陆后的用户信息通过

jwt加密成token,转发给系统1,系统1在通过认证中心判断token是否有效,如果token正确,系统解析token后,将用户信息存储到session,其中token通过存储到cookie,配置不同子域同cookie,这样不同的站点只要*域名相同也可以获取同一个cookie。

二:如果认证中心记录用户未登陆,则跳转到sso的登陆入口。

三:以上过程需要将系统1的访问地址作为参数,在跳转过程作为参数传递,登陆成功后直接跳转到系统1地址。

四:当每次在sso认证中心认证token过程中,需要记录下所有系统的地址,然后在对这些地址进行注销,实现单点注销

但是本文章中的系统采用的是session作为存储信息,如果要清除session需要带上每一个系统的cookie,然后通过这些cookie

请求每个系统的注销接口。而记录这些cookie和路由地址到sso认证中心的缓存中,当访问的用户多的话,每一个用户都记录一份系统路由,cookie,对服务器压力可能也会比较大,于是换个角度想想,可以将其中一个站点点击注销后,将一个标记变量记录到cookie,访问其他站点如果发现这个cookie标记,则清除session,如果这个cookie标记在登陆过程中存在,则清除否则就会一直不能登陆。这样的话只需要每一个用户的浏览器记录cookie,就减轻服务器压力。

下图是使用令牌实现单点注销:

SSO单点登陆,单点注销设计思想

性能:比较单点注销的话,对服务器压力比较小。

可扩展性:该sso系统封装和配置好了对应内容,可以在各个模块下扩展开发。

安全性:可能cookie会被篡改,导致单点登陆失效。

上一篇:自己开发SSO单点登录


下一篇:修改是否启用统一认证