美文网首页
单点登录

单点登录

作者: ChrisWF | 来源:发表于2017-07-20 15:38 被阅读10次

    单点登录,简称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跨域的原理是利用<script>标签实现的,相当于是在新的域名下引入了一个<script>标签,post方式不能够实现这种需求;

    一般来说,需要向多个域名下存入token,所以建议修改ajax的async属性将其修改成为同步的。确保在每个域名下都写入成功后再进行下面的操作。

    相关文章

      网友评论

          本文标题:单点登录

          本文链接:https://www.haomeiwen.com/subject/sjzdkxtx.html