单点登陆SSO原理

技术分享 Finley Fu 2019-11-11 1评论 129
B/S架构是目前我们接触最多的,但是随着需求的日益增长,单Server已经不能满足了,但是多Server存在如何让用户不重复登陆的问题,SSO就是专门解决这个问题的一种方案。

   单系统登陆  

1、http无状态协议

        web应用作为B/S架构,使用得是http协议,而http又是无状态协议。即浏览器的每一次请求,服务器都单独处理没有关联,如下图:

        但是在大多数应用中都存在保护资源,用户想要访问这些资源是需要一定的授权认证的,那么这就需要服务器能辨别浏览器请求,因此就产生了会话机制,让服务器和浏览器共同维护一个状态。

2、会话机制

        浏览器登陆后,服务器创建一个会话id,并且将此会话id作为响应的一部分返还给浏览器,以此作为本用户访问标识,后续的请求都会带上此会话id,这样浏览器的每次请求直接就会存在关联关系

        现在大多数的服务器软件都实现了会话机制,我们只需要在使用的使用调用相关方法就行,并不需要过多考虑。

   多系统问题  

        如果不实现单点登陆,那么用户访问多系统就如同下图,需要在每个系统上进行登陆,导致用户体验并不太好。

        在进行系统设计时,应遵循一个原则:复杂性应由系统承担,而不是用户。因此不能让用户在每个系统都进行登陆,最理想的方式,用户在访问该系统群时,应该如同访问一个系统一样,不需要进行多次登陆。


   单点登陆  

        单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

1、登陆

        单点登陆需要我们制作一个sso认证中心,此认证中心正式所有系统的登陆入口并负责验证账号密码准确性,当验证完账号后会生成全局会话然后分发给每个系统,分发给单个系统的会话称为局部会话,当用户访问某个系统时,该系统首先验证局部会话是否存在,若不存在,则跳转到认证中心进行登陆。

单点登陆时序图

        用户登陆成功后,全局会话和局部会话存在着以下制约关系:

            局部会话存在,全局会话一定存在。

            全局会话存在,局部会话不一定存在。

            全局会话销毁,局部会话一定销毁。

2、注销

        单点注销即在一个子系统中进行注销,所有的会话都将被注销。

单点注销时序图