单点登录(sso)的简单理解


生活中我们有很多的网站可能用的是同一个账户,比如百度贴吧和百度云盘,我们肯定是希望如果我们登陆了百度贴吧,打开百度云后,网站可以自动登陆,不需要再次登陆,多个网站共享一个登陆账号的登录信息,登陆,可以增强用户体验,实际的多网站共享信息的情况可以分为两种

  • 跨子域单点登录
  • 完全跨单点域登录

跨子域单点登录

1. 同父域的概念

如果顶级域名是wjiban.com,则a.wjiban.com和b.wjiban.com称之为wjiban.com 的子域名,a和b有相同的父域。

2.cookie的作用域

1.设置Cookie.Domain = "yourdomain.com",效果为所有的子域名都可以取到这个Cookie
2.设置Cookie.Domain = "www.yourdomain.com",效果为www主机下所有位置可以取
3.Cookie.Domain ="www.yourdomain.com" ; Cookie.Path = "/bbs",www主机的bbs下可以取

所以如果网站是同父域的,可以把登录信息存入cookie ,cookie的作用域 设置为 顶级域名,这样所有的子域名就能访问浏览器的cookie ,
ps. 子域名之间理论上是属于跨域,不能相互通信;


完全跨单点登录

sso需要一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,sso认证中心验证用户的用户名密码没问题,创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌,即得到了授权,可以借此创建局部会话,局部会话登录方式与单系统的登录方式相同。这个过程,也就是单点登录的原理

这里写图片描述


实现方式

通过jsonp实现

因为不同域名之间传递信息属于跨域
对于跨域问题,可以使用JSONP实现。
用户在父应用中登录后,跟Session匹配的Cookie会存到客户端中,当用户需要登录子应用的时候,授权应用访问父应用提供的JSONP接口,并在请求中带上父应用域名下的Cookie,父应用接收到请求,验证用户的登录状态,返回加密的信息,子应用通过解析返回来的加密信息来验证用户,如果通过验证则登录用户。

通过页面重定向的方式

是通过父应用和子应用来回重定向中进行通信,实现信息的安全传递。
父应用提供一个GET方式的登录接口,用户通过子应用重定向连接的方式访问这个接口,如果用户还没有登录,则返回一个的登录页面,用户输入账号密码进行登录。如果用户已经登录了,则生成加密的Token,并且重定向到子应用提供的验证Token的接口,通过解密和校验之后,子应用登录当前用户


参考文章:
http://www.cnblogs.com/yizhu2000/archive/2008/04/01/1131976.html(单点登录原理)
http://www.cnblogs.com/2050/p/3191744.html(跨域的方法)
https://cnodejs.org/topic/55f6e69904556da7553d20dd(单点登录的实现)
http://blog.csdn.net/kky2010_110/article/details/4743796(cookie的作用域)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值