单点登录

单点登录概念

在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统。

在这里插入图片描述
如图上所示,图中有四个系统,分别是Application1、Application2、Application3和SSO。只有SSO有登录模块没有其他业务模块,其他三个系统都没有登录模块,当没有登录模块需要登录时,将跳到SSO系统,SSO系统完成登录,其他的应用系统也随之登录了。这就完全符合了对单点登录的定义。

登录认证机制

在这里插入图片描述
如图所示,我们在浏览器中访问一个应用,这个应用需要登录,我们填写完用户名和密码后,完成登录认证。这时,我们在这个用户的session中标记登录状态为yes(已登录),同时在浏览器中写入cookie,这个cookie是这个用户的唯一标识。下次我们再访问这个应用的时候,请求中会带上这个cookie,服务端会根据这个cookie找到相对应的session,通过session来判断这个用户是否登录。

同域下的单点登录

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

我们只要在sso.z.com登录,app1.z.com和app2.z.com就也登录了。通过上面的登陆认证机制,我们可以知道,在sso.z.com中登录了,其实是在sso.z.com的服务端的session中记录了登录状态,同时在浏览器端(Browser)的sso.z.com下写入了Cookie。那么我们怎么才能让app1.z.com和app2.z.com登录呢?这里有两个问题:

1.cookie是不能跨域的,我们cookie的domain属性是sso.a.com,在给app1.z.com 和app2.z.com发送请求是带不上的。

2.sso、app1和app2是不同的应用,它们的session存在自己的应用类,是不共享的。

问题解决方法

针对第一个问题,sso登录以后,可以将cookie的域设置为顶域,即.z.com,这样所有子域的系统都可以访问到顶域的cookie。在设置cookie时,只能设置顶域和自己的域,不能设置其他的域。

针对第二个问题,就是要把三个系统的session共享。如下图所示:
在这里插入图片描述
但是这还不是真正的单点登录,只是实现了同域下的单点登录。

不同域下的单点登录

CAS流程

CAS流程是单点登录的标准流程:
1.用户访问app系统,app系统是需要登录的,但用户现在没有登录。

2.跳转到CAS server,也就是SSO登录系统,SSO系统也没有登录,弹出用户登录页。

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

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

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

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

总结

  • 单点登录(SSO系统)是保障各业务系统的用户资源的安全 。

  • 各个业务系统获得的信息是,这个用户能不能访问我的资源。

  • 单点登录,资源都在各个业务系统这边,不在SSO那一方。 用户在给SSO服务器提供了用户名密码后,作为业务系统并不知道这件事。 SSO随便给业务系统一个ST,那么业务系统是不能确定这个ST是用户伪造的,还是真的有效,所以要拿着这个ST去SSO服务器再问一下,这个用户给我的ST是否有效,是有效的我才能让这个用户访问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值