其他分享
首页 > 其他分享> > 单点登录(SSO)原理

单点登录(SSO)原理

作者:互联网

转:https://yq.aliyun.com/articles/636281

一、同域

一个企业一般情况下只有一个域名,通过二级域名区分不同的系统。比如有个域名叫做:a.com,同时有两个业务系统分别为:app1.a.com和app2.a.com。另外,要做单点登录(SSO),需要一个登录系统,叫做:sso.a.com。

  1. Cookie是不能跨域的,我们Cookie的domain属性是sso.a.com,在给app1.a.com和app2.a.com发送请求是带不上的。
  2. sso、app1和app2是不同的应用,它们的session存在自己的应用内,是不共享的。
  1. 针对第一个问题,sso登录以后,可以将Cookie的域设置为顶域,即.a.com,这样所有子域的系统都可以访问到顶域的Cookie。
  2. 针对第二个问题,使用session共享。

二、不同域(重点)

由于Cookie无法跨域,需要使用以下方式:

  1. 用户访问app系统,app系统是需要登录的,但用户现在没有登录。
  2. 跳转到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。
  1. 用户访问app2系统,app2系统没有登录,跳转到SSO。
  2. 由于SSO已经登录了,不需要重新登录认证。
  3. SSO生成ST,浏览器跳转到app2系统,并将ST作为参数传递给app2。
  4. app2拿到ST,后台访问SSO,验证ST是否有效。
  5. 验证成功后,app2将登录状态写入session,并在app2域下写入Cookie。

三、总结

  1. 单点登录保障了各业务系统用户资源的安全 。
  2. 单点登录解决了运维人员需要在多个业务系统之间重复登录的问题。
  3. 单点登录,资源都在各个业务系统这边,不在SSO那一方。 用户在给SSO服务器提供了用户名密码后,作为业务系统并不知道这件事。 SSO随便给业务系统一个ST,那么业务系统是不能确定这个ST是用户伪造的,还是真的有效,所以要拿着这个ST去SSO服务器再问一下,这个用户给的ST是否有效,是有效的才能让这个用户访问。

标签:单点,登录,系统,app2,ST,SSO,com
来源: https://www.cnblogs.com/C8WATER/p/12221997.html