cookie单点登录(跨域访问)
新近一家公司上来就让做oa,要求嵌入公司现有系统模块,自然而然想到模拟post单点登录对方系统新建单点登陆页面保存session,然现有系统都有用cookie保存用户信息,故保存本地cookie……测试失败。网上查询得知,生成的cookie所在的domainName不同所致,也就是存在cookie跨域访问问题。
因为现有相同都是ip+端口访问方式,故无法使用二级域名共享cookie,现想到方法就是利用iframe来实现SSO,解决方法如下:
主系统通过js创建隐藏iframe(src路径即为子系统所建ashx页面)
//创建隐藏iframe调用单点登录页面实现cookie跨域共享
var sso_frm = document.createElement("iframe");
sso_frm.style.display = "none";
sso_frm.src = "@ViewBag.SSO_Url?uid=@ViewBag.uid&pwd=@ViewBag.pwd";
document.body.appendChild(sso_frm);
子系统新建一个ashx页面,接收参数并写入cookie (代码略),这个方法取了个巧,相当于变相的登录了其他系统,唯一不足之处就是在主平台登录时需要遍历所有权限内子系统创建iframe并登录,这个方法可以很好地处理不同主域下的单点登录。
扩展:
1)对于相同主域下的二级域名我们可以利用二级域名共享cookie实现单点登录如:站点A登录后创建cookie,设置主域:cookie.Domain = "sso.com",此时B登录可直接获取A创建的cookie。
2)对于不同主域下的单点登录除了利用iframe还可以借助统一认证站点(passport.com)来实现单点登录
例如”
站点A www.a.com
站点B www.b.com
认证站点C www.passport.com
票据:ticket加密的账号密码以cookie形式存在。
认证过程:假设用户user1未曾登录过站点AB, A登录后判断 a_ticket(user1加密账号密码)是否存在,否则跳转站点C验证页面,登录成功后生成c_ticket(加密账号密码)并返回A站a_ticket;而后B站点登录会重定向站点C 验证c_ticket验证成功返回b_ticket并重定向B。
3) 我们也可以利用redis来替换认证站点C 处理逻辑与上述过程类似:
1.user1访问站点A,如果a_ticket存在则正常登录,否则判断缓存中是否存在以user1账号为key的值(user1账号密码加密),如果存在即返回该值并写入a_ticket,如果不存在即跳转站点A登录页登录后创建user1的redis缓存并创建a_ticket;
2.user1访问站点B,如果b_ticket存在则正常登录,否则判断缓存中是否存在以user1账号为key的值(user1账号密码加密),如果存在即返回该值并写入b_ticket,如果不存在则挑战站点B登录页面登录后创建
user1的redis缓存并创建b_ticket;
总结:写的有点碎,但是大体意思应该表达清楚了,实现起来也比较简单就不再赘述。
cookie单点登录(跨域访问)的更多相关文章
- vue+springboot前后端分离实现单点登录跨域问题处理
最近在做一个后台管理系统,前端是用时下火热的vue.js,后台是基于springboot的.因为后台系统没有登录功能,但是公司要求统一登录,登录认证统一使用.net项目组的认证系统.那就意味着做单点登 ...
- cookie 跨域访问的解决方案
Cookie 同域单点登录 最近在做一个单点登录的系统整合项目,之前我们使用控件实现单点登录(以后可以介绍一下).但现在为了满足客户需求,在不使用控件情况下实现单点登录,先来介绍一下单点登录. ...
- 基于CAS的SSO单点登录-实现ajax跨域访问的自动登录(也相当于超时重连)
先补课,以下网址可以把CAS环境搭起来. [JA-SIG CAS服务环境搭建]http://linliangyi2007.iteye.com/blog/165307 [JA-SIG CAS业务架构介绍 ...
- 在IE浏览器中iframe跨域访问cookie/session丢失的解决办法
单点登录需要在需要进入的子系统B中添加一个类,用于接收A系统传过来的参数: @Action(value = "outerLogin", results = { @Result(na ...
- CP="CAO PSA OUR" 用P3P header解决iframe跨域访问cookie
1.IE浏览器iframe跨域丢失Session问题 在开发中,我们经常会遇到使用Frame来工作,而且有时是为了跟其他网站集成,应用到多域的情况下,而Iframe是不能保存Session的因此,网上 ...
- 通过设置P3P头来实现跨域访问COOKIE
通过设置P3P头来实现跨域访问COOKIE 实际工作中,类似这样的要求很多,比如说,我们有两个域名,我们想实现在一个域名登录后,能自动完成另一个域名的登录,也就是PASSPORT的功能. 我只写一个大 ...
- 解决cookie跨域访问
一.前言 随着项目模块越来越多,很多模块现在都是独立部署.模块之间的交流有时可能会通过cookie来完成.比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入c ...
- PHP 通过设置P3P头来实现跨域访问COOKIE
CentOS的系统(Linux 内核) 编辑HOST vi /etc/hosts 加入127.0.0.1 www.a.com127.0.0.1 www.b.com 首先:创建 a_setcookie. ...
- 携带cookie的跨域访问
携带cookie的跨域解决方案 有的时候访问后台的请求需要携带cookie以供后台分析,比如jQuery的ajax请求: $.ajax({ url: a_cross_domain_url, xhrFi ...
随机推荐
- Y+的一些讨论
一.关于 fluent计算时壁面函数法和网格的关系,还有一个小问题 1:各位用 fluent的同仁和高手们,我想要比较好的使用 fluent软件,最重要的就是要学好理 论,在这里我想请教各位一个问题, ...
- ctags and vim
1,源码目录下第归检索. ctags -R * 2,搜索tag并用vim打开: vim -t <tag> 3,在vim 下的一些操作: Keyboard command Action Ct ...
- 关于C语言的问卷调查(作业三)
1.你对自己的未来有什么规划?做了哪些准备? 答:我对我未来的规划就是希望能够学有所用,将来可以从事有关IT方面的,跟自己的专业对口.为此现在我需要多看一些和这个专业有关的书籍,自学一些知识,多些一些 ...
- Bpmx实施经验
Bpmx是一个较大的平台,直接发布的话会有内存问题,经查阅一些资料,java1.5没有解决好之前版本的历史问题,所以在垃圾处理gc上有很多配置需要手动完成,之后的版本同上. Bpmx平台自带的文档中部 ...
- python获取指定时间段内的随机不重复的时间点
上篇 <python时间时分秒与秒数的互相转换>http://www.cnblogs.com/gayhub/p/6154707.html 提到了把时间转成秒数的方法, 这篇写写转换成秒数后 ...
- beacon帧
1.MAC头部 解释: ① Version 版本号 目前为止802.11只有一个版本,所以协议编号为0 ② Type 00表示管理帧,01表示控制帧,10表示数据帧 ③ Subtype 和Type一 ...
- Alpha版使用说明书
游戏规则: 玩家是黑色的小煤球哦! 通过方向键或者ASDW,来控制小球移动(上.下.左.右). 累计时间,直到碰到了红色的小球 ...
- C++ const
在程序中经常遇到const,但是对他还不是非常了解,今天看到一篇文章讲挺好的,所以复制过来了.... 原文链接:http://blog.csdn.net/Eric_Jo/article/details ...
- 几款Z2760平板对比
现阶段的Windows平板本质上分为Windows RT系统平板和完整的Windows 8系统平板两大阵营.RT系统的平板轻薄续航持久,但是由于没法安装常规的.exe程序,所以对于工作需要略显不足,是 ...
- js字符拼接
for (var j = 0; j < 9; j++) { eval("if (datas[i].b" + j + " == '1') { b[j-1] = 1; ...