单点登录系统原理组成

SSO介绍

SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一。

方案

-1. 可以配置tomcat的session共享。配置tomcat集群。Tomcat配置好集群后,会不停的向集群中其他的tomcat广播自己的session信息。其他的tomcat做session同步。可以保证所有的tomcatsession中的内容都是一致的。

优点:不用修改代码就可以实现session共享。
缺点:tomcat 是全局session复制,集群内每个tomcat的session完全同步(也就是任何时候都完全一样的) 在大规模应用的时候,用户过多,集群内tomcat数量过多,session的全局复制会导致集群性能下降, 因此,tomcat的数量不能太多,5个以下为好。

-2. 实现单点登录系统,提供服务接口。把session数据存放在redis。
Redis可以设置key的生存时间、访问速度快效率高。

优点:redis存取速度快,不会出现多个节点session复制的问题。效率高。
缺点:需要额外的开发。

-3.用一种新的基于 JWT 的 token 方式来实现,python-jwt 生成与校验,简单来说 jwt 可以携带无法篡改的信息(一段篡改就会校验失败),所以我们可以将用户 id 等非敏感信息直接放到 jwt 中。然后我们要做的就是将 jwt 共享给各个平台页面即可。

登录

相比于单系统登录,sso需要一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,sso认证中心验证用户的用户名密码没问题,创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌,即得到了授权,可以借此创建局部会话,局部会话登录方式与单系统的登录方式相同。这个过程,也就是单点登录的原理,用下图说明

下面对上图简要描述

1.用户访问系统1的受保护资源,系统1发现用户未登录,跳转至sso认证中心,并将自己的地址作为参数
2.sso认证中心发现用户未登录,将用户引导至登录页面
3.用户输入用户名密码提交登录申请
4.sso认证中心校验用户信息,创建用户与sso认证中心之间的会话,称为全局会话,同时创建授权令牌
5.sso认证中心带着令牌跳转会最初的请求地址(系统1)
6.系统1拿到令牌,去sso认证中心校验令牌是否有效
7.sso认证中心校验令牌,返回有效,注册系统1
8.系统1使用该令牌创建与用户的会话,称为局部会话,返回受保护资源
9.用户访问系统2的受保护资源
10.系统2发现用户未登录,跳转至sso认证中心,并将自己的地址作为参数
11.sso认证中心发现用户已登录,跳转回系统2的地址,并附上令牌
12.系统2拿到令牌,去sso认证中心校验令牌是否有效
13.sso认证中心校验令牌,返回有效,注册系统2
14.系统2使用该令牌创建与用户的局部会话,返回受保护资源
  用户登录成功之后,会与sso认证中心及各个子系统建立会话,用户与sso认证中心建立的会话称为全局会话,用户与各个子系统建立的会话称为局部会话,局部会话建立之后,用户访问子系统受保护资源将不再通过sso认证中心,全局会话与局部会话有如下约束关系

1.局部会话存在,全局会话一定存在
2.全局会话存在,局部会话不一定存在
3.全局会话销毁,局部会话必须销毁

优点:

  1.提高用户的效率

  用户不再被多次登录困扰,也不需要记住多个ID密码,另外,用户忘记密码并求助于支持人员的情况也会减少.

  2.提高开发人员的效率

  SSO为开发人员提供了一个通用的身份证验证框架.实际上,如果SSO机制是独立的,那么开发人员就完全不需要为身份验证进行操心,他们可以假设,只要对应用程序的请求附带一个用户名,身份验证就已经完成了.

  3.简化管理

  如果应用程序加入了单点登录协议,管理用户账号的负担就会减轻,简化的程度取决于应用程序,因为SSO只处理身份验证.所以,应用程序可能仍然需要设置用户的属性(比如访问特权).

缺点:

  1.不利于重构,

  因为涉及到的系统会很多,要重构必须要兼容所有的系统,可能很耗时.

  2.无人看守桌面

  因为只需要登录一次,所有的授权的应用系统都可以访问,可能导致一些很重要的信息泄露.

posted @ 2019-11-12 19:11  达芬奇vinic  阅读(328)  评论(0编辑  收藏  举报