SSO单点登陆实战及遇到的问题

SSO单点登录


单点登录:Single Sign On,它的出现致力于提供分布式项目中的用户登录和注销操作,使之只需要一次登陆即可在所有其他系统中无需登陆。注销同理,在任一系统中注销其他系统也会退出登陆。这样各个系统无需有登陆退出功能,统一进行用户授权。 比如阿里系的淘宝和天猫,很明显地我们可以知道这是两个系统,但是你在使用的时候,登录了天猫,淘宝也会自动登录。

在SSO体系中,主要包括三部分:

  1. User (多个)
  2. Web 应用(多个)
  3. SSO 认证中心( 1 个)

而SSO的实现基本核心原则如下:

  • 所有的登录都在 SSO 认证中心进行
  • SSO 认证中心通过一些方法来告诉 Web 应用当前访问用户究竟是不是已通过认证的用户
  • SSO 认证中心和所有的 Web 应用建立一种信任关系, SSO 认证中心对用户身份正确性的判断会通过某种方法告之 Web 应用,而且判断结果必须被 Web 应用信任。

单系统回顾


在学习SSO的实现之前,先对以往的单系统用户身份授权认证的实现进行简单回顾。
首先,HTTP是无状态的协议,服务器无法直接确认用户的信息。于是乎,W3C就提出了:给每一个用户都发一个通行证,无论谁访问的时候都需要携带通行证,这样服务器就可以从通行证上确认用户的信息。通行证就是Cookie。

如果说Cookie是检查用户身上的”通行证“来确认用户的身份,那么Session就是通过检查服务器上的”客户明细表“来确认用户的身份的。Session相当于在服务器中建立了一份“客户明细表”。

HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一个用户。于是乎:服务器向用户浏览器发送了一个名为JESSIONID的Cookie,它的值是Session的id值。其实Session是依据Cookie来识别是否是同一个用户。

所以,一般我们单系统实现登录会这样做:

  • 登录:将用户信息保存在Session对象中
    如果在Session对象中能查到,说明已经登录;
    如果在Session对象中查不到,说明没登录(或者已经退出了登录)
  • 注销(退出登录):从Session中删除用户的信息
  • 记住我(关闭掉浏览器后,重新打开浏览器还能保持登录状态):配合Cookie来用

CAS实现


本节紧接着第一节SSO单点登录,CAS全称为Central Authentication Service即中央认证服务,是一个企业多语言单点登录的解决方案,并努力去成为一个身份验证和授权需求的综合平台。

CAS是由Yale大学发起的一个企业级的、开源的项目,旨在为Web应用系统提供一种可靠的单点登录解决方法(属于 Web SSO ),即它是SSO的一种实现。

CAS协议至少涉及三方:客户端Web浏览器,请求身份验证的Web应用程序和CAS服务器。 它也可能涉及后端服务,如数据库服务器,它没有自己的HTTP接口,但与Web应用程序进行通信。

从结构上看,CAS 包含两个部分: CAS 服务端和 CAS 客户端。CAS服务端需要独立部署,主要负责对用户的认证工作;CAS 客户端负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS 服务端。上图是 CAS 最基本的协议过程。跟单系统的session记录用户信息一样,CAS也有类似的概念:

  • TG

CAS服务端

实践中的问题

  • 单点登出返回的页面仍旧显示为登陆成功的,刷新后才会跳转到cas服务端登陆页面.

参考资料

什么是单点登录 -知乎·Java3y
未完待续。。。

本文已结束 ❤ 感谢阅读
觉得文章不错,赞赏站长一包辣条( •̆ ᵕ •̆ )◞ ❤
0%