单点登录(SSO)原理
作者:互联网
转:https://yq.aliyun.com/articles/636281
一、同域
一个企业一般情况下只有一个域名,通过二级域名区分不同的系统。比如有个域名叫做:a.com,同时有两个业务系统分别为:app1.a.com和app2.a.com。另外,要做单点登录(SSO),需要一个登录系统,叫做:sso.a.com。
- 注意点:
- Cookie是不能跨域的,我们Cookie的domain属性是sso.a.com,在给app1.a.com和app2.a.com发送请求是带不上的。
- sso、app1和app2是不同的应用,它们的session存在自己的应用内,是不共享的。
- 解决方案:
- 针对第一个问题,sso登录以后,可以将Cookie的域设置为顶域,即.a.com,这样所有子域的系统都可以访问到顶域的Cookie。
- 针对第二个问题,使用session共享。
二、不同域(重点)
由于Cookie无法跨域,需要使用以下方式:
- 当访问app1时:
- 用户访问app系统,app系统是需要登录的,但用户现在没有登录。
- 跳转到SSO登录系统,SSO系统也没有登录,弹出用户登录页。
- 用户填写用户名、密码,SSO系统进行认证后,将登录状态写入SSO的session,浏览器(Browser)中写入SSO域下的Cookie。
- SSO系统登录完成后会生成一个ST(Service Ticket),然后跳转到app系统,同时将ST作为参数传递给app系统。
- app系统拿到ST后,从后台向SSO发送请求,验证ST是否有效。
- 验证通过后,app系统将登录状态写入session并设置app域下的Cookie。
- 当访问app2时:
- 用户访问app2系统,app2系统没有登录,跳转到SSO。
- 由于SSO已经登录了,不需要重新登录认证。
- SSO生成ST,浏览器跳转到app2系统,并将ST作为参数传递给app2。
- app2拿到ST,后台访问SSO,验证ST是否有效。
- 验证成功后,app2将登录状态写入session,并在app2域下写入Cookie。
三、总结
- 单点登录保障了各业务系统用户资源的安全 。
- 单点登录解决了运维人员需要在多个业务系统之间重复登录的问题。
- 单点登录,资源都在各个业务系统这边,不在SSO那一方。 用户在给SSO服务器提供了用户名密码后,作为业务系统并不知道这件事。 SSO随便给业务系统一个ST,那么业务系统是不能确定这个ST是用户伪造的,还是真的有效,所以要拿着这个ST去SSO服务器再问一下,这个用户给的ST是否有效,是有效的才能让这个用户访问。
标签:单点,登录,系统,app2,ST,SSO,com 来源: https://www.cnblogs.com/C8WATER/p/12221997.html