前言sso,单点登录,单点登录。简单的说,当我们有多个系统的时候,我们每个人单独登录是很麻烦的,所以我们做一个单独的登录系统,我们称之为sso,这个登录系统可以登录其他多个系统,并且访问多个系统只需要登录一次。通用登录机制我们的系统一般都是使用session和cookie作为我们的登录认证,这里不做赘述,但是sso方式就是利用session和cookie做文章来达到我们单点登录的目的。同域单点登录机制简单。同一域下的两个系统属于同一个根域名。例如app1.a.com和app2.a.com都属于根域名.a.com。并且我们创建一个sso系统域名为sso.a.com,也属于.a.com。当我们登录sso系统时,会生成一对session和cookie,但是生成的session和cookie对其他系统是不起作用的。首先,我们将sso系统生成的cookie的范围设置为根域,这样当我们请求.a.com下的域名时,也会请求根域范围的cookie。如上图,百度翻译cookie中有fanyi.baidu.com范围的cookie,也有.baidu.com范围的cookie。打开百度翻译网站的时候,不需要登录,直接认证我的百度账号,看范围。.baidu.com的Cookie。用sso.a.com的cookie打开app1.a.comURL是不够的。到了app1.a.com后台后,如果后台没有注册发送的cookie,还是没有用的。这就需要我们共享系统所有的后台会话。session的共享方式有很多种,比如Spring-Session。这样就完成了同域下的单点登录。不同域下的单点登录CAS,CentralAuthenticationService,集中认证服务。直接看图1,当用户访问应用时,其他系统检测到未认证,重定向到cas登录界面。2、用户输入用户名和密码,cas在后台验证用户是否为合法用户。认证通过后,返回浏览器cookie(cas),同时返回serviceticket。3、浏览器用Serviceticket再次请求应用程序。应用程序请求casServiceticket是否通过安全连接认证。如果设置为登录系统的登录状态,则返回系统cookie(系统1)。4、用户访问第二个系统时,第二个系统检测不到其登录状态,同样被重定向到cas。cas检测到已经检测到登录,然后直接返回serviceticket,浏览器向第二个系统请求serviceticket,第二个系统也通过securelink请求casserviceticket是否经过认证。然后它返回第二个系统(系统2)的cookie。综上所述,我们发现session和cookie认证的基本原理并没有发生根本性的变化。