单点登录

单点登录,简称sso,是目前比较流行的企业业务整合的解决方案之一。定义是:在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

实现原理:实现一次登录一次退出,只需要想办法让各个sever的共用一个session的信息,让客服端在各个域名下都能够持有这个ID就好了。

实现方式:

server端: 1.共享cookie;2.验证token;因为共享了cookie所以出于安全性考虑不再以session-id作为身份的识别。而是产生一个通用的识别标记,我们称之为SSO-Token,这个识别标记在整个sever群中都是唯一的,它的背后代表的就是用户的信息

浏览器端:在所有的业务域名下植入能够代表身份的token,在统一个域名下很好实现,只需要将token存入cookie中就行了。但是有许多的公司其各个业务系统的域名都不相同,要在不同的域名下写入cookie就需要用到跨域的技巧。

技术实现机制:

1.所有应用系统共享一个身份认证系统。

统一的认证系统是SSO的前提之一。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。另外,认证系统还应该对token进行效验,判断其有效性。

1.所有应用系统能够识别和提取token信息

要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对ticket进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。

优点:

1.提高用户效率  2.提高开发效率  3.简化管理

缺点:

1.不利于重构 2,,有可能导致安全信息的泄露

实现跨域:

本次项目中是使用的JQ+AJAX实现的跨域。

var url = domain.cdoArrDomain[i].strDomain + '?ticket=' + domain.ticket + '&sign=' + domain.sign;

$.ajax({

type: "get",

async: false,

url: url,

dataType: "jsonp",

jsonp: "callback",

success: function(json) {

console.log("success")

},

error: function(json) {

console.log(error)

}

});

需要注意的几点是在填写ajax的参数的时候,

dataType要设置为指定的jsonp;

url代表你想要跨域的地址;

jsonp是前后端约定好的回调函数 一般默认为callback;

需要注意的是在JQ提供的跨域功能中只支持用get的方式发送请求。因为jsonp跨域的原理是利用

你可能感兴趣的:(单点登录)