乐趣区

关于java:单点登录SSO的实现原理与方案详解

为什么须要单点登录

单点登录 SSO(Single Sign On)说得简略点就是在一个多零碎共存的环境下,用户在一处登录后,就不必在其余零碎中登录,也就是用户的一次登录能失去其余所有零碎的信赖。

单点登录在大型网站里应用得十分频繁,例如,阿里旗下有淘宝、天猫等网站,还有背地的成千盈百的子系统,用户一次操作或交易可能波及到几十个子系统的合作,如果每个子系统都须要用户认证,不仅用户会疯掉,各子系统也会为这种反复认证受权的逻辑搞疯掉。

所以,单点登录要解决的就是,用户只须要登录一次就能够拜访所有相互信任的利用零碎。

单点登录的起源

1. 晚期 web 单零碎利用

晚期咱们开发 web 利用都是所有的包放在一起打成一个 war 包放入 tomcat 容器来运行的, 所有的性能, 所有的业务, 后盾治理, 门户界面, 都是由这一个 war 来反对的, 这样的单利用, 也称之为巨石利用, 因为非常不好扩大和拆分。

在巨石利用下,用户的登录以及权限就显得非常简略,当浏览器向服务器发送登录申请时,验证通过之后,会将用户信息存入 seesion 中,而后服务器会生成一个 sessionId 放入 cookie 中,随后返回给浏览器。

大抵能够用下图来示意:

验证登录的这个会话就是 session, 保护了用户状态, 也就是所谓的 HTTP 有状态协定, 咱们常常能够在浏览器中看到 JSESSIONID, 这个就是用来维持这个关系的 key。
单点登录 SSO 的实现原理与计划详解 -mikechen 的互联网架构

2. 分布式集群部署

因为网站的访问量越来也大,单机部署曾经是微小瓶颈,所以才有了起初的分布式集群部署。

例如:如果引入集群的概念, 单利用可能重新部署在 3 台 tomcat 以上服务器, 应用 nginx 来实现反向代理。

然而减少新的服务器之后,不同的服务器之间的 sessionId 是不一样的,可能在 A 服务器上曾经登录胜利了,能从服务器的 session 中获取用户信息,然而在 B 服务器上却查不到 session 信息,只好退出来持续登录,后果 A 服务器中的 session 因为超时生效,登录之后又被强制退出来要求从新登录。

所以不得不思考多服务器之间的 session 数据统一的问题,这就是单点登录的最早起源。

单点登录的实现形式

单点登录的实质就是在多个利用零碎中共享登录状态,如果用户的登录状态是记录在 Session 中的,要实现共享登录状态,就要先共享 Session。

所以实现单点登录的关键在于,如何让 Session ID(或 Token)在多个域中共享。

1. 同域下的单点登录

一个企业个别状况下只有一个域名,通过二级域名辨别不同的零碎。

比方我有个域名:mikechen.cc,同时有两个业务零碎别离为:

blog.mikechen.cc
video.mikechen.cc

咱们要做单点登录(SSO),须要一个登录零碎,叫做:sso.mikechen.cc。

咱们只有在 sso.mikechen.cc 登录,blog.mikechen.cc 和 video.mikechen.cc 也登录了。

实现形式:其实这里就是利用了 二级域名 写 一级域名的 Cookie。sso.mikechen.cc 登录当前,能够将 Cookie 的域设置为顶域,即.mikechen.cc,这样所有子域 blog.mikechen.cc 和 video.mikechen.cc 的零碎都能够拜访到顶域的 Cookie。

此种实现形式比较简单,但不反对跨主域名, 局限性限于一级域名是一样的。

2. 不同域下的单点登录

同域下的单点登录是巧用了 Cookie 顶域的个性, 如果是不同域呢,比方:上面三个是不同域的

mikechen1.cc
mikechen2.cc
mikechen3.cc

实现形式:咱们能够部署一个 SSO 认证核心, 认证核心就是一个专门负责解决登录申请。

所有的申请(登录、退出、获取用户信息、以后用户状态)都申请 sso 零碎,sso 系统维护用户信息。

此种实现形式绝对简单,反对跨域,扩展性好,是单点登录的规范做法。

基于 SSO 认证核心的开源我的项目代表:CAS,其中 CAS 是 Central Authentication Service,即地方认证服务,下图是 CAS 的根本过程:

单点登录 SSO 的实现原理与计划详解 -mikechen 的互联网架构

以上就是基于单点登录的介绍!

-END-

对于作者:mikechen,十余年 BAT 架构教训,资深技术专家,曾任职阿里、淘宝、百度。

欢送关注集体公众号:mikechen 的互联网架构,十余年 BAT 架构教训倾囊相授!

在公众号菜单栏对话框回复【架构 】关键词,即可查看我 原创的 300 期 +BAT 架构技术系列文章与 1000+ 大厂面试题答案合集。

退出移动版