单点登录(SSO)认识和实践

什么是单点登录
单点登录(Single Sign On)是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分
实现方式一:父域 Cookie
Cookie 有一个特点,即父域中的 Cookie 被子域所共享,换句话说,子域会自动继承父域中的Cookie。
利用 Cookie 的这个特点,将 Session ID(或 Token)保存到父域中就行了。我们只需要将 Cookie 的 domain 属性设置为父域的域名(主域名),同时将 Cookie 的 path 属性设置为根路径,这样所有的子域应用就都可以访问到这个 Cookie 了。
要求系统的域名需建立在一个共同的主域名之下,如 tieba.baidu.com 和 map.baidu.com他们都建立在了baidu.com这个主域名之下,可以使用这种方式实现单点登录
优缺点:此种实现方式比较简单,但不支持跨主域名
实现方式二:认证中心
相比于单系统登录,sso需要一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,sso认证中心验证用户的用户名密码没问题,创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌,即得到了授权,可以借此创建局部会话,局部会话登录方式与单系统的登录方式相同。
系统登录流程图
单点登录(SSO)认识和实践_第1张图片

单点退出流程
用户在SSO系统登录后创建token,保存token到数据库t_token表中,当子系统登录时,将该token的子系统信息:退出url和jsessionid信息保存到t_client_info表,一对多关系。当用户点击退出时,调用SSO系统/logOut方法,销毁sesseion,并在web.xml中注册session监听器,当有销毁操作时,调出t_client_info表对象信息,并依次调用子系统的/logOut方法,根据jsessionid销毁子系统中session对象信息,从而实现全部退出。
认证中心示例:
代码地址:https://gitee.com/jun-yuqing/project

你可能感兴趣的:(java,spring)