跨域单点登录系统的设计与实现

标签: 单点登录 系统 设计 | 发表时间:2015-04-03 05:24 | 作者:houqingdong2012
出处:http://blog.csdn.net

跨域单点登录系统的设计与实现

一、跨域单点登录系统整体设计

1. 系统架构


如上图所示:在系统存在一个认证中心以及多个站点。用户信息统一由认证中心管理,在其它子站的登录均会跳转到认证中心来登录。

2. 工作流程

单点登录系统的关键在于,当用户从一个子站登录后,它会在认证中心生成ticket标识,只要该标识存在就代表用户已经成功登陆了。每个子站在进入之前,无论本地ticket标识是否存在,均会去请求一次认证中心,要做的事情如下:如果子站ticket不存在,并不一定代表用户没有从别的子站登录,但是如果用户在别的子站登录过,则在认证中心一定会有ticket存在,则该次请求的目的就是去判断认证中心ticket是否存在,如果存在,则说明用户已经在别的子站登录了,要做的只是请求回来后在自己站点的cookie中种上ticket,如果不存在则说明用户根本没有登录,则直接跳转至登录页面即可;如果子站ticket存在,则它去认证中心请求的目的在于,如果认证中心ticket已经不存在了则说明用户已经退出了,则请求返回后需要将本地cookie中的ticket清掉,达到“一登全登,一退全退”的效果,如果认证中心ticket还存在,则需要验证该ticket的真伪,是不是该客户端的(需借助一些其他手段)。详细流程如下。

先假设用户从未登录过系统,当他访问A站点时,会去认证中心请求一次(jsonp跨域的请求),结果发现认证中心也没有ticket,则跳转至认证中心的登录页面,当用户在认证中心登录后,则认证中心会跳转至A站点,此时A站点还会去认证中心请求一次,而这次会拿到ticket返回,就将ticket种植在本站的cookie中,代表用户在本站已经登录了。

当用户此时又去访问B站点时,同样会先去认证中心请求一次,请求的结果发现ticket存在,则它将ticket也种在自己站点的cookie中,这样用户就不需登录就可以在B站点随意访问了。

当用户在B站点操作完退出时,会去认证中心请求一次,该次请求会将认证中心保存的ticket值清掉。当在别的站点操作,去认证中心请求时,发现ticket已经没有了,同时也会将自己站点的ticket清掉,这样,又会跳转至登录页面。

二、jsonp跨域脚本请求

跨域单点登录需要解决的一个技术点就是跨域的问题。利用jsonp可以解决该问题,在系统中需要做两件事。第一:在认证中心新建一个js文件(注意:该文件并不是认证中心使用的,而是给其它子站点做跨域访问使用的),实现ajax的jsonp请求,即在认证中心的js中,写一段ajax,它要去调一下本地的接口,以判断本地ticket是否存在。如果存在,在success的返回中,将ticket值种下。如果不存在,同样将ticket清掉(该操作是清除站点cookie,从而让用户退出)。第二:在系统中,其它各个子站点的头文件中,引用一段js,实现js远程加载,如下方式:

<script type=”text/javascript” src=”http://auth.gfly.com/js/RemotePlantCookies.js”></script>

这样,在子站点每次刷新时,都会加载一下认证中心的js文件,而该js文件是跨域的,在种cookie时,其实是种在各个子站点的。

jsonp跨域请求的示例如下:

$(document).ready(function(){

    var res = $.ajax({

            type:"get",

            dataType:"jsonp",              

            url:"http://auth.gfly.com/index.php?r=user/user/getTicket",

            crossDomain:true,

            success:function(r)

            {

                 var res = r;

                 if(res.res == true)

                 {

                     var exp = new Date();  

                     exp.setTime(exp.getTime() + 6 * 60 * 60 * 1000); 

                     document.cookie = "ticket="+res.token+";expires="+exp.toGMTString()+";path=/";

                 }

                 else

                 {

                     var date = new Date();

                     date.setTime(date.getTime()-10000);

                     document.cookie="ticket=000; expire="+date.toGMTString();

                 }

            },

            error:function()

            {

            }

     });

});

三、安全说明

        在cookie传递账号密码等信息是很危险的,虽然我们的ticket值是加密后的子串,但倘若别人截获了我的ticket,然后直接利用ticket给服务端发送请求信息,则它同样可以通过验证。基于此,稍微安全一点的方法是,登陆时,在认证中心端,同时将客户端的IP地址记录下来,在验证ticket的环节同时对比此时请求验证的客户端的IP地址是否与之前保存的IP地址一致,只有一致才可以通过验证,否则不予理睬。

    注:与宏图联调单点登录系统完成。可喜可贺!!

作者:houqingdong2012 发表于2015/4/2 21:24:27 原文链接
阅读:77 评论:0 查看评论

相关 [单点登录 系统 设计] 推荐:

跨域单点登录系统的设计与实现

- - CSDN博客推荐文章
跨域单点登录系统的设计与实现. 一、跨域单点登录系统整体设计. 如上图所示:在系统存在一个认证中心以及多个站点. 用户信息统一由认证中心管理,在其它子站的登录均会跳转到认证中心来登录. 单点登录系统的关键在于,当用户从一个子站登录后,它会在认证中心生成ticket标识,只要该标识存在就代表用户已经成功登陆了.

cas配置单点登录

- - 开源软件 - ITeye博客
        最近一段时间研究的cas,不知道是什么原因,可能自己最近太浮躁了,没有沉下心来去研究,所以一直拖着,将近拖了一周半的时间,上周的周总结,确保一定要解决的问题,今天还是横下心来,处理完这个问题,我是一个对于技术痴迷的人,对于现在研究出来这个结果非常高兴,与大家分享一下:.        注明:本文所讲的至少怎么配置,但是具体的原理和细节会在稍后的时间里更新给大家,如有不对的地方希望大家指出来,共同学习和探讨一下.

android 单点登录功能

- - CSDN博客移动开发推荐文章
很多伙伴在开发自己公司产品的时候,一般都会考虑用户账号安全 ,或者用户账号功能使用限制等问题. 这时候我们就会考虑到单点登录这个功能. 一般情况下我们在开发单点登录功能的时候,其实有很多种做法,这个根据自己的具体需求选择就可以,其实我一直认为很多东西没有绝对的规则,我们其实需要做的是尽量全面的尽可能多的去掌握更多的知识技术,当我们用到的时候可以从中选择出最适合自己的产品的技术,从开发时间,应用性等.

CAS解决单点登录SSO

- - CSDN博客推荐文章
关于CAS很多的原理和基础的配置启动,网上是很多的,我更多是结合我的实践和心得. 需要了解CAS的原理,认证协议,认证流程,可以参考以下文章. 让CAS支持客户端自定义登陆页面——客户端篇. CAS原理与配置-基于CAS的单点登陆的研究(上). 单点登录(SSO)是企业开发的重要问题,在我的毕设项目中,由于要和系统其他开发模块共用用户认证模块,方便共享用户资源,所以需要一个好的SSO解决方案.

自己动手写SSO(单点登录)

- - ITeye博客
SSO在我们的应用中非常常见,例如我们在OA系统登录了,我们就可以直接进入采购系统,不需要再登录了,这样使我们非常方便. 现在网上也有很多实现方法,于是乎我也想写一个看看. 我主要用到的是cookie的机制. 在此,分享给大家, 同时提供源代码下载. SSO的实现一般是会有一个SSO Server,也会叫认证中心,同时也会有被认证的系统,如OA系统、采购系统等,他们就相当于SSO Server的client.

CAS 4.0 单点登录教程

- - ITeye博客
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一. SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 耶鲁大学(yale)开发的单点登录(Single Sign On)系统称为CAS(Central Authentication Service)被设计成一个独立的Web应用程序(cas.war).

CAS实现SSO单点登录原理

- - 非技术 - ITeye博客
CAS实现SSO单点登录原理. CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO ). CAS 开始于 2001 年, 并在 2004 年 12 月正式成为 JA-SIG 的一个项目.

单点登录SSO的实现原理

- - 非技术 - ITeye博客
单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任. 单点登录在大型网站里使用得非常频繁,例如像阿里巴巴这样的网站,在网站的背后是成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都需要用户认证,不仅用户会疯掉,各子系统也会为这种重复认证授权的逻辑搞疯掉.

CAS单点登录(SSO)完整教程

- - 互联网 - ITeye博客
CAS单点登录(SSO)完整教程(2012-02-01更新). 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤. 单点登录(SSO):请看百科解释. 本教程使用的SSO服务器是Yelu大学研发的CAS(Central Authentication Server),. CAS Server版本:cas-server-3.4.3.1、cas-server-3.4.10.

互联网上的单点登录研究

- Frank Cai - 互联网的那点事
随着互联网络应用的普及,越来越多的人开始使用互联网上提供的服务. 然而目前提供服务的网站大多采用用户名、口令的方式来识别用户身份,这使得用户需要经常性的输入自己的用户名、口令. 显然这种认证方式存在着弊端:随着用户网络身份的增多,用户相应的需要记忆多组用户名、口令,这给用户造成记忆上的负担;另外频繁的输入用户名、口令,会相应的增大用户的口令密码被破解的机率.