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 ...
随机推荐
- 获取数据库表详细信息、存储过程、视图、的sql
select s.[name] + '.' + t.[name] as tablename from sys.tables as t,sys.schemas as s where t.schema_i ...
- arm嵌入式交叉编译工具链
1.arm-linux-gcc 常用的参数:-o[制定输出文件名] -c[只到编译停止,不连接] -g[键入调试信息] -xO[优化级别] -w/W(警告等级) arm-linux-gcc -o de ...
- 安装了简易版XP系统后不能安装IIS的解决办法
第一步 找到C:\WINDOWS\inf文件夹中的sysoc.inf文件,在 [Components]区域中的NetOC=netoc.dll,NetOcSetupProc,netoc.inf,,7和c ...
- mybatis学习2
解决字段名与实体类属性名不相同的冲突 1. 准备表和数据:CREATE TABLE orders(order_id INT PRIMARY KEY AUTO_INCREMENT,order_no VA ...
- Python学习路程day21
本节内容: 项目实战:开发一个WEB聊天室 功能需求: 用户可以与好友一对一聊天 可以搜索.添加某人为好友 用户可以搜索和添加群 每个群有管理员可以审批用户的加群请求,群管理员可以用多个,群管理员可以 ...
- docker 源码分析 六(基于1.8.2版本),Docker run启动过程
上一篇大致了解了docker 容器的创建过程,其实主要还是从文件系统的视角分析了创建一个容器时需要得建立 RootFS,建立volumes等步骤:本章来分析一下建立好一个容器后,将这个容器运行起来的过 ...
- hash表C语言实现
算法参考<算法导论>第11章散列表.采用链地址法解决冲突. #include <stdio.h> #include <stdlib.h> #include < ...
- LeetCode 21 -- Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...
- SIP模块版本错误问题:the sip module implements API v??? but XXX module requires API v???
系统安装了python 2.7,继续安装PyQt4,于是依次下载sip.pyqt4源码进行安装.用以下代码测试: import PyQt4.QtGui 显示出错.错误信息:the sip module ...
- Direct3D 10学习笔记(一)——初始化
本篇将简单整理Direct3D 10的初始化,具体内容参照< Introduction to 3D Game Programming with DirectX 10>(中文版有汤毅翻译的电 ...