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

来源:互联网 发布:淘宝达人发布单品链接 编辑:程序博客网 时间:2024/05/29 03:41

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

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

跨子域单点登录

1. 同父域的概念

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

2.cookie的作用域

1.设置Cookie.Domain = "yourdomain.com",效果为所有的子域名都可以取到这个Cookie2.设置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
原创粉丝点击