zoukankan      html  css  js  c++  java
  • 跨域单点登录实现(使用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

  • 相关阅读:
    论文解析 -- TiDB: A Raftbased HTAP Database
    人生资产负债表
    Hadoop、Hive、Spark 之间关系
    在 Python3 中,bytes 和 str 的互相转换方式是
    json中load和loads区别
    springboot——修改html实时生效,不用重启tomca(idea版)
    ThinkPHP6 利用crontab+think make:command执行定时任务 tp6默认不可以用命令行访问控制器
    Whoops, GitLab is taking too much time to respond.解决
    phpmyadmin导入csv文件 #1366
    pipenv --python 'python/path' install 报错原因
  • 原文地址:https://www.cnblogs.com/lexus/p/2493380.html
Copyright © 2011-2022 走看看