1、 概念

单点登录概念:Single Sign On,简称SSO,即在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

2、SSO实现方法

单点登录实现方法:

1、  例如:惠普灵越单点登录系统,只是通过向各个系统发送用户名和密码

2、  例如:例如淘宝、天猫大型网站所使用的SSO技术,只要登录一个另一个关联网站就不用在登录。

案例实现说明:

http://blog.chinaunix.net/uid-25508399-id-3431705.html

http://developer.51cto.com/art/201104/255729.htm

http://blog.csdn.net/clh604/article/details/20365967

单点登录网上有很多实现方法,例如:

  • 基于cookies实现
  • Broker-based(基于经纪人)
  • Agent-based(基于代理)
  • Token-based

本次单点系统的是基于Cookie技术实现的,但是使用cookie存在两个大问题:

1、  由于cookie是存储在客户端本地,所以在安全性是是存在问题。

解决方法:通过对cookie值进行加密操作。

2、  Cookie本身是不能跨域的,这个问题难解决。

解决方法:将cookie结合Ajax中的jsonp协议。

3、JSONP跨域原理

利用在页面中创建<script>节点的方法向不同域提交HTTP请求的方法称为JSONP,这项技术可以解决跨域提交Ajax请求的问题。JSONP的工作原理如下所述:

假设在http://example1.com/index.jsp这个页面中向http://example2.com/getinfo.jsp提交GET请求,我们可以将下面的JavaScript代码放在http://example1.com/index.jsp这个页面中来实现:

当GET请求从http://example2.com/getinfo.jsp返回时,可以返回一段JavaScript代码,这段代码会自动执行,可以用来负责调用http://example1.com/index.jsp页面中的一个callback函数。

  • JSONP的优点是:它不像XMLHttpRequest对象实现的Ajax请求那样受到同源策略的限制;它的兼容性更好,在更加古老的浏览器中都可以运行,不需要XMLHttpRequest或ActiveX的支持;并且在请求完毕后可以通过调用callback的方式回传结果。
  • JSONP的缺点则是:它只支持GET请求而不支持POST等其它类型的HTTP请求;它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题。

 

下面我重点说明一下跨域问题:

什么是跨域:

之所以会有跨域问题,产生的根本原因是浏览器的同源策略限制,理解同源策略的限制是指代码获得或者更改从一个域名下获取文件或者信息,也就是说我们请求地址必须和当前网站的地址相同。同源策略通过隔离来实现对资源的保护。