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

跨域单点登录实现(使用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="jquery-1.4.1.min.js"></script>

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

            $("#isso").remove();
            //动态框架
            var $frame = $('<iframe name="isso" id="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 id="btnajax" type="button" value="跨站请求" />
<iframe id="isso" name="isso"  style="display:none" ></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

原文地址:https://www.cnblogs.com/lexus/p/2493380.html