单点登录

SSO:单点登录(Single Sign On)
功能:在多个应用系统中,只要登录其中一个,就可以访问其他信任的系统。


单点登录_第1张图片
截图1.png

如图所示,图中有4个系统,分别是Application1、Application2、Application3、和SSO。Application1、Application2、Application3没有登录模块,而SSO只有登录模块,没有其他的业务模块,当Application1、Application2、Application3需要登录时,将跳到SSO系统,SSO系统完成登录,其他的应用系统也就随之登录了。这完全符合我们对单点登录(SSO)的定义。

同域下的SSO:

同域的条件:协议+域名+端口一致

1.sso登录以后,可以将Cookie的域设置为顶域,即.a.com,这样所有子域的系统都可以访问到顶域的Cookie。我们在设置Cookie时,只能设置顶域和自己的域,不能设置其他的域。比如:我们不能在自己的系统中给baidu.com的域设置Cookie。

2.Cookie的问题解决了,我们再来看看session的问题。我们在sso系统登录了,这时再访问app1,Cookie也带到了app1的服务端(Server),app1的服务端怎么找到这个Cookie对应的Session呢?这里就要把3个系统的Session共享,如图所示。共享Session的解决方案有很多,例如:Spring-Session。这样第2个问题也解决了。

同域下的单点登录就实现了,但这还不是真正的单点登录。

跨域SSO:

具体流程如下:

1.用户访问app系统,app系统是需要登录的,但用户现在没有登录。

2.跳转到CAS server,即SSO登录系统,以后图中的CAS Server我们统一叫做SSO系统。 SSO系统也没有登录,弹出用户登录页。

3.用户填写用户名、密码,SSO系统进行认证后,将登录状态写入SSO的session,浏览器(Browser)中写入SSO域下的Cookie。

4.SSO系统登录完成后会生成一个ST(Service Ticket),然后跳转到app系统,同时将ST作为参数传递给app系统。

5.app系统拿到ST后,从后台向SSO发送请求,验证ST是否有效。

6.验证通过后,app系统将登录状态写入session并设置app域下的Cookie。

至此,跨域单点登录就完成了。以后我们再访问app系统时,app就是登录的。接下来,我们再看看访问app2系统时的流程。

1.用户访问app2系统,app2系统没有登录,跳转到SSO。

2.由于SSO已经登录了,不需要重新登录认证。

3.SSO生成ST,浏览器跳转到app2系统,并将ST作为参数传递给app2。

4.app2拿到ST,后台访问SSO,验证ST是否有效。

5.验证成功后,app2将登录状态写入session,并在app2域下写入Cookie。

这样,app2系统不需要走登录流程,就已经是登录了。SSO,app和app2在不同的域,它们之间的session不共享也是没问题的。

CAS总结之Ticket篇https://blog.csdn.net/fireofjava/article/details/46944689

你可能感兴趣的:(单点登录)