Web应用跨域访问解决方案

Web应用跨域访问解决方案

Web应用的跨域访问 解决方案 Web跨域访问 解决方案
做过跨越多个 网站的Ajax开发的朋友都知道,如果在A 网站中,我们希望使用Ajax来获得B 网站中的特定内容,如果A 网站与B 网站不在同一个域中,那么就出现了跨域访问问题。Ajax的跨域访问问题是现有的Ajax开发人员比较常遇到的问题。
IE对于跨域访问的处理是,弹出警告框,提醒用户。如果用户将该网站纳入可信任网站,或者调低安全级别,那么这个问题IE就不会在提醒你。
FireFox等其它非 微软浏览器遇到跨域访问,则解决方案统一是拒绝访问。
有人说,IE是主流浏览器,只要它能正常使用就好了。此言差已,IE虽然能够处理,但是是有前提的,要么用户不厌其烦地在页面弹出警告框之后点击是(点击否就不执行该Ajax调用了),要么用户将该网站纳入可信任站点。这两种做法,在企业管理系统的应用中倒是比较常见,因为系统管理员可以以行政手段保证用户的行为。但是对于 互联网上的网站或者门户开发,这种做法则不行。
最近遇到了这个问题,需要在跨域访问结束之后完成使主窗口出现一些特效,搜索了一些资料,通过不断尝试以及在不同浏览器中进行兼容性测试,找到了几个可行的 Web应用跨域访问解决方案
1、Web代理的方式。即用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网站的指定页面,由该页面代替用户页面完成交互,从而返回合适的结果。此方案可以解决现阶段所能够想到的多数跨域访问问题,但要求A网站提供Web代理的支持,因此A网站与B网站之间必须是紧密协作的,且每次交互过程,A网站的 服务器负担增加,且无法代用户保存session状态。
2、on-Demand方式。MYMSN的门户就用的这种方式,不过MYMSN中不涉及跨域访问问题。动态控制script标记的生成,通过修改script标记的src属性完成对跨域页面的调用。此方案存在的缺陷是,script的src属性完成该调用时采取的方式时get方式,如果请求时传递的字符串过大时,可能会无法正常运行。不过此方案非常适合聚合类门户使用。
3、iframe方式。查看过醒来在javaeye上的一篇关于跨域访问的帖子,他提到自己已经用iframe的方式解决了跨域访问问题。数据提交跟获取,采用iframe这种方式的确可以了,但由于父窗口与子窗口之间不能交互(跨域访问的情况下,这种交互被拒绝),因此无法完成对父窗口效果的影响。
4、用户本地转储方式:IE本身依附于windows平台的特性为我们提供了一种基于iframe,利用 内存来“绕行”的方案,即两个window之间可以在客户端通过windows剪贴板的方式进行数据传输,只需要在接受数据的一方设置Interval进行轮询,获得结果后清除Interval即可。FF的平台独立性决定了它不支持剪贴板这种方式,而以往版本的FF中存在的插件漏洞又被fixed了,所以FF无法通过 内存来完成暗渡陈仓。而由于文件操作FF也没有提供支持(无法通过Cookie跨域完成数据传递),致使这种技巧性的方式只能在IE中使用。
5、我自己用于解决这类问题的方式:结合了前面几种方式,在访问A网站时,先请求B网站完成数据处理,再根据返回的标识来获得所需的结果。这种方法的缺点也很明显,B网站的负载增大了。优点,对session也实现了保持,同时A网站与B网站页面间的交互能力增强了。最重要的一点,这种方案满足了我的全部需要。
总结一下,以上方案中可选择的情况下,我最推荐on-Demand方式,在不需要提交大量数据的情况下,这种方式能够解决您的大部分问题。

最近在研究SSO,看到各种复杂的解决方案觉得很疑惑,自己想出了个简单有效的方案,大家来评评有什么问题吗?
服务器A:网站A
服务器B:网站B
服务器C:验证网站(验证表中有UIDKEY两个字段)。

1.       用户打开网站A的页面http://服务器A/a.aspx,检测发现网站Session中没有存储用户名UID

2.       系统转到验证服务器登录页面,并在QUERYSTRING中附加前一个页面的URL地址。比如http://服务器C/login.asp?URL=http://服务器A/a.aspx

3.       在验证服务器登录成功后更新验证服务器的Session(超时设置为足够长,比如1天)。然后生成一个GUID值,写入验证表。最后,把这个GUID值和UID保存到一个类中序列化后附加在URL中返回网站A的那个页面。比如http://服务器A/a.aspx? token=sadhsagdkjasgyugd7d8yweihasdiuhagsdiuashdhaiushdi

4.       网站A的页面读取QUERYSTRING,然后反序列化出一个类,读取类的UIDKEY信息。然后,从数据库中查找匹配的记录,如果找到了则表明登录成功,并把这条记录的KEY更新成另外一个GUID(这样就保证了即使这个URL被别人拿走再登录都不能成功)。把UID写入服务器ASession中即可。

5.       用户打开网站B的页面http://服务器B/b.aspx,服务器B上没有当前用户的Session信息,自动转向验证服务器检测是否存在Session,如果找到了表明用户已经登录过,再重复步骤34,如果没有找到就转到验证服务器的登录页面。
巧妙之处在于:

l         网站服务器和验证服务器都拥有一份和用户关联的Session,验证到时候不需要传任何和UID相关的信息,因此也可以跨服务器。正因为如此不需要使用cookie也解决了跨域名。

l         网站服务器和验证服务器可以使用自己的状态机制(不一定是Session),因此跨平台也没有问题。

l         用于验证用户的TOKEN使用GUID在每次验证的时候都会更换,而且GUIDUID是捆绑在一起的,即使GUID碰巧对上了也不知道这个GUID对应了哪个UID

l         通过验证服务器的验证后,服务器发回的token数据经过了序列化,用户很难伪造。
(实在不放心还可以对这个token进行加密)
不知道大家是否理解了?
更新:经过网友提醒,我想到这个方案在登出的时候有严重问题,比如A网站登出了,我们不能通知其它网站该用户已经登出,它再切换到其它网站又是登录状态(因为Session没有过期),不过我也想到了一个解决方案。就是所有的网站都有一个专门的页面或者服务,根据传过来的令牌来清空这个当前用户的Session。登出以后把所有网站的Session都清空,如果网站不是很多的情况下还好,网站一多登出就会很慢了!
更新:现在看来已经没有什么问题了,到时候放出完整DEMO!
更新:有网友不理解为什么关闭浏览器所有网站退出登录?因为Session是和用户浏览器实例关联的,而我们所有网站都使用Session,因此关闭了浏览器所有网站都退出了。这个和退出登录按钮不一样,退出登录按钮需要发通知让所有网站清除Session。
更新:我们现在把这个框架的登录放到了各个网站中,保证登录和退出在登录服务器Down的情况下也能进行,只是不能进行跨站登录罢了。登录服务器Down还能实现本站登录和退出。过几天放出完整源代码!
==========================================================

单点登陆问题-实现单点登陆的几种方法
1 可以实现单点登陆的几种方法

(1)基于domain的方案
         这种方案是我公司目前使用的一种方案,原理:应用A在a.domain.com,B在b.domain.com,如果设cookie的时候,设domain为domain.com,那在A、B上都可以访问到这个cookie了。(cookie的domain、path、port、version、secure相同)。
该方案特点:
1、不能够跨域
2、在网络中传送用户名和密码
3、只支持J2EE应用
(2)基于gateway的方案
        实际部署的时候,对所有应用的请求,都要通过一个gateway转发一下,比如用一个L4的交换机顶在前面。
(3)基于tooken传递的方案
        主要是以耶鲁大学的CAS项目为基础。
        注意:你自己的应用看不到用户的密码。由CAS执行授权,只有CAS能看到用户的密码。这样增加发安全性,因为用户名和密码不会通过网络在应用间传播。
下面是使用CAS整合的单点登录用例
用例一:
一台认证 服务器(假定为AUTH),有两个应用A、B,分别部署在不同的 服务器上。
1) 用户访问A,A应用无法找到用户的身份信息,使用redirect方法将用户引导至 http://Auth/login?service=http://A/path
2) AUTH 显示登录界面,用户输入登录信息,认证通过。
3) AUTH产生一个cookie(这个cookie只有AUTH上才能读到),使用redirect方法将用户引导回 http://A/path?token=xxxxx(在有的 解决方案上,这个token是通过一定编码算法的Account信息)
4) A读取token=xxxx的信息,获取用户身份。
5) 用户访问B。B未找到用户的身份信息,redirect至 http://AUTH/login?service=http://B/path
6) AUTH读cookie获取用户身份,然后redirect回 http://B/path?token=xxxx
7) B读取token=xxxx信息,获得用户身份信息
用例二:
  用户访问一个Web应用的过程。

具体的参看 http://www.9ta8.com/YaleCASServer.mht
(4)USBKey登录
        这个方案是北京点聚信息技术有限公司提供的,我也向他们的技术咨询了相关的问题。他们的实现方式基本上是这样的:每个使用该系统的用户都有一个USBKey证书,在登陆系统的时候把这个证书插在计算机上。每一个 网站都要通过这个证书去认证。
        这样每个登录用户只需插上USBKey即可进入任意受信任系统,当然访问USBKey首先需要密码校验。
2  个人认为单点登陆实际上就两种方案
        首先确认要使用单点登陆,必须有一个核心,那就是不管用户走到那个平台,他必须要带着他的通行证,单点登陆最关键的问题是用户怎么取得、保存、使用这个通行证的问题。  用户要取得他的通行证其实不外乎以下两种方案:
        第一种:所有的业务平台集成在一个Portal上,去每一个平台的时候都要带着他的“通行证”,这就是所谓的“Tooken传递方案”;
        第二种:使用硬件卡,就是上面所说的“USBKey登陆”;
3  单点登陆的几个案例
(1) 微软一篇关于单点登陆的文章,他的实现是使用第一种方案。
原文:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/singlesignon.asp
(2)SharePoint Portal Server 2003 中的单一登录
http://www.microsoft.com/china/technet/prodtechnol/sppt/reskit/c2661881x.mspx
(3)《WebCast SharePoint Portal Server 2003 Single Sign On 管理及开发》已提供 下载
http://www.msotec.net/Forums/ShowThread.aspx?PostID=415

4  单点登陆的参考方法
服务器端可控JS跨域访问解决方法
http://bbs.ad0.cn/viewthread.php?tid=302&extra=page%3D1
SSO - Single Sign-On Enterprise Security for Web Applications
http://bbs.ad0.cn/viewthread.php?tid=304&extra=page%3D1
单点登录的简单实现
http://bbs.ad0.cn/viewthread.php?tid=305&extra=page%3D1
PHP实现WebServices和跨域自动登陆
http://bbs.ad0.cn/viewthread.php?tid=307&extra=page%3D1
Passport跨域认证解决方法
http://bbs.ad0.cn/viewthread.php?tid=309&extra=page%3D1
Web应用跨域访问解决方案
http://bbs.ad0.cn/viewthread.php?tid=310&extra=page%3D1
Flex或Flash的跨域访问解决方案
http://bbs.ad0.cn/viewthread.php?tid=313&extra=page%3D1
跨域访问新方案-PHPRPC
http://bbs.ad0.cn/viewthread.php?tid=315&extra=page%3D1


==========================================================
PHP使用P3P完成跨域COOKIE操作[转载]
实际工作中,类似这样的要求很多,比如说,我们有两个域名,我们想实现在一个域名登录后,能自动完成另一个域名的登录,也就是PASSPORT的功能。
为了测试的方便,先编辑hosts文件,加入测试域名(C:/WINDOWS/system32/drivers/etc/hosts)
127.0.0.1       www.a.com
127.0.0.1       www.b.com
首先:创建 a_setcookie.php 文件,内容如下:
<?php
//header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
setcookie("test", $_GET['id'], time()+3600, "/", ".a.com");
?>
然后:创建 a_getcookie.php 文件,内容如下:
<?php
var_dump($_COOKIE);
?>
最后:创建 b_setcookie.php 文件,内容如下:
<script src="http://www.a.com/a_setcookie.php?id=www.b.com"></script>
----------------------------
三个文件创建完毕后,我们通过浏览器依次访问:
http://www.b.com/b_setcookie.php
http://www.a.com/a_getcookie.php
我们会发现,在访问b.com域的时候,我们并没有在a.com域设置上cookie值。
然后我们修改一下a_setcookie.php文件,去掉注释符号,a_setcookie.php即为:
<?php 
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'); 
setcookie("test", $_GET['id'], time()+3600, "/", ".a.com"); 
?>
再次通过浏览器依次访问:
http://www.b.com/b_setcookie.php
http://www.a.com/a_getcookie.php
这次,你会发现在访问b.com域的时候,我们设置了a.com域的cookie值。

单点登录的简单实现

SSO 单点登录的简单实现 实现门户 网站单点登录
  在门户项目中,经常会遇到如何实现单点登录的问题,下面就本人的经验做个总结。欢迎大家进行补充讨论。
单点登录的具体实现有很多种选择,包括:
  • 采用专门的SSO商业软件: 主要有:Netgrity的Siteminder,已经被CA收购。Novell 公司的iChain。RSA公司的ClearTrust等。
  • 采用门户产品供应商自己的SSO产品,如:BEA的WLES,IBM 的Tivoli Access Manager,Sun 公司的identity Server,Oracle公司的OID等。
  • 这些商业软件一般适用于客户对SSO的需求很高,并且企业内部采用COTS软件如:Domino,SAP,Sieble的系统比较多的情况下采用。并结合身份管理。统一认证等项目采用。采用这些软件一般都要对要集成的系统做些改造,如在要集成的系统上安装AGENT。现在一般只提供常见软件如:Domino,SAP,Sieble,常见应用服务器:weblogic,websphere等的AGENT。要先统一这些系统的认证。一般采用LDAP或数据库。然后才能实现SSO。比较麻烦。
  • 另外,如果不想掏银子,也有OPEN SOURCE的SSO软件可选:主要有:http://www.josso.org/ https://opensso.dev.java.net/ http://www.sourceid.org 等。具体怎么样就不清楚了。
  如果项目对SSO的要求比较低,又不想对要被集成的系统做任何改动,可采用下面介绍的方式简单实现:下面我们通过一个例子来说明。假如一个门户项目要对下面的几个系统做SSO。

  用户在这些系统中的用户名,密码各不相同,如:员工号为001的员工在这些系统中的用户名,密码分别如下:
用户系统用户名密码
001Portal系统A1234
001邮件系统B2345
001DOMINO系统CAAAA
001报销系统DCCCC
001工资系统EBBBB

首先,建立员工在PORTAL系统中的用户名和其他系统中的用户名之间的对应关系   首先,要建立员工在PORTAL系统中的用户名和其他系统中的用户名之间的对应关系并保存。可保存在表中或LDAP中或文件系统中。当然要考虑这些系统之间的数据同步问题。比较好的方式是找到用户在这些系统中的都存在的唯一信息(如员工号,MAIL地址,姓名等)。通过唯一信息实时到各个系统中去取认证所需要的信息。就不需要考虑数据同步问题。比较实用。可以建立类似下面的表:密码可采用加密保存。如果是采用BEA的Weblogic Portal,可采用UUP来保存这些信息。
        (                user         varchar2(20),           /*用户名*/        app_name varchar2(20),          /*应用系统*/        architect varchar2(4),                  /*应用系统的架构BS或CS*/        app_company varchar2(50),          /*用户所属分公司*/        app_department varchar2(50),      /*用户所在的部门*/        app_user varchar2(15),                 /*在该系统中的用户名*/        app_passwd varchar2(15),         /*在该系统中的密码*/        app_cookie varchar2(30),              /*COOKIE名称*/        form_user varchar2(20),                /*认证页面中FORM的用户名字段*/        form_passwd varchar2(20),          /*认证页面中FORM的密码字段*/        app_special  varchar2(20)           /*其他*/        );通过IFRAME或超连接方式集成目标系统,并进行SSO  通过IFRAME或超连接方式集成目标系统,并在URL中带上用户名和密码。如集成DOMINO可采用如下方式:
  <IFRAME src= http://host1/names.nsf?Login&Username=admin&Password=pass&RedirectTo=/names.nsf
width="100%" frameborder="0" align="middle" height="100%" hspace="0" marginheight="0" marginwidth="0" scrolling="yes" style="background-color:#f7f7ff;">
</IFRAME>
  或:
Href src=“ http:// host1 /names.nsf?Login&Username=admin&Password=pass&RedirectTo=/names.nsf
以上采用的是在HTTP中直接传递明码,为提高安全性,可采用HTTPS来传递用户名和密码。另外采用这种方式被集成的系统必须支持FORM方式认证。J2EE应用,DOMINO等都支持FORM认证。
  这两种方式如果SSO成功,就自动进入目标系统的界面,如果实现会显示目标系统的登录界面。其效果图如下:

  这种方式,必须维护对应关系表,如上面的sso_info。更好的方式是提供界面,让最终用户自己维护这种对应关系,可模仿Compoze portlets for lotus的做法,在用户第一次进入要与之做SSO的系统时,如DOMINO系统,显示一个界面,让用户自己输入他在该系统中的用户名/密码等信息。并保存到表中或LDAP等其他数据源中。以后用户要进入这些系统时,就直接从表中或其他数据源中取用户的用户名/密码等信息,帮助用户做认证。建议采用这种方式。如下图所示。如果用户改变了自己在DOMINO系统中的用户名,密码。从门户系统进入DOMINO系统时,认证会失败,就重新显示类似下面的界面。让用户重新输入他在DOMINO系统中新的用户名,密码并保存。

  以上这种实现方式,一般需要 浏览器支持COOKIE,所以要注意 浏览器的配置,在开发阶段,为方便调试,可设置IE,让它显示COOKIE的名称。如下所示:

  采用这种方式,对要集成的系统不需要做任何的改动。如果PORTAL系统中的用户在被集成的系统中的权限都一样,可采用建立一个通用用户的做法。也就是所有在PORTAL系统中的用户都采用这个通用用户进入目标系统。这种方式等于是采用页面集成方式做集成。比较方便使用。另外,有时候需要采用调用API,或配置Adapter等应用集成方式来集成其他系统,一般也是通过定义一个连接专用的用户。在API中或在配置Adapter的时候写死。如采用JAVA API方式集成DOMINO:
   lotus.domino.Session dominoSession = NotesFactory.createSession(dominoServer, “admin”, “password”);
CS结构实现方式  经常有人问CS结构的应用如何实现SSO,本人的建议是对这种系统不要自己去实现SSO。很麻烦,其实输个用户名,密码没什么大不了的。如果要实现,一是采用商业软件。另外也可以采用以下方式:在PORTAL的PORTLET上建立超连接。并通过APPLET方式启动CS结构的应用系统的登录界面。然后通过如下的方式把用户名/密码传递过去。
   -不能做任何改动的客户端 - WIN消息(给登录窗口发送用户名,密码等登录所需要的信息),模拟键盘(java有模拟键盘输入的API)
   -可以做改动的客户端 - 参数传递,并让登录的EXE文件读取参数进行认证。
  因为要让APPLET执行本地的EXE文件,所以必须对IE中的JRE的安全进行设置。

其他:  在采用以上方式实现了SSO后,要注意LOGOUT,可采用与LOGIN相同的方式。也可以通过被集成系统的超时设置来实现。

作者简介
 BEA 资深技术顾问,加入BEA中国多年,在门户技术、RFID解决方案上有着丰富的经验。

代码:

<?php
function open($save_path, $session_name) {
  global $sess_save_path, $sess_session_name;
       
  $sess_save_path = $save_path;
  $sess_session_name = $session_name;
  return(true);
}
function close() {
  return(true);
}
function read($id) {
  global $sess_save_path, $sess_session_name;
  $sess_file = "$sess_save_path/sess_$id";
  if ($fp = @fopen($sess_file, "r")) {
    $sess_data = fread($fp, filesize($sess_file));
    return($sess_data);
  } else {
    return(""); // Must return "" here.
  }
}
function write($id, $sess_data) {
  global $sess_save_path, $sess_session_name;
  $sess_file = "$sess_save_path/sess_$id";
  if ($fp = @fopen($sess_file, "w")) {
    return(fwrite($fp, $sess_data));
  } else {
    return(false);
  }
}
function destroy($id) {
  global $sess_save_path, $sess_session_name;
       
  $sess_file = "$sess_save_path/sess_$id";
  return(@unlink($sess_file));
}
/*********************************************
* WARNING - You will need to implement some *
* sort of garbage collection routine here.  *
*********************************************/
function gc($maxlifetime) {
  return true;
}
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
session_start();
// proceed to use sessions normally
?>

按照这种思路,我们只要编写自己的处理函数并进行相应的注册,就可以实现PHP Session数据的自定义存储了。
具体实现可以开动你的思路,比如可以使用NFS将Session数据存储到统一的网络设备中,也可以将Session数据保存到一个数据库中,让所有服务器连接这个共享数据库(比如MySQL)就可以了。
嗯,比较简单,而且经济。
更多考虑:
1、性能需要考量,特别是服务器数(引起资源占用)和用户量(引起Session量)非常巨大的时候。
==========================================================
PHP实现WebServices和跨域自动登陆
1、webservices的php实现
主要是基于nusoap这个库来实现的,其不但可以实现server功能还可以实现client功能,支持end point和WSDL两种方式;连soap协议的xml消息都是自己解析的,所以完全可以脱离其他php库支持;优点之一啊;可惜,可能有性能上的忧虑。
2、session跨域自动登陆
了解http协议特性的人都知道(参考RFC),服务端session只能是通过cookie或者get、post方法传递的unique id来实现的;因此欺骗服务端session的行为理论上是很容易实现的,只要你知道那个unique id及传递的方式;而在某个session创建之后,只要传递给其该唯一标示,其都是可以被认可为会话客户的;因此,在获得会话id的前提下任何跨域session访问都是可能的。通过get、post方式的id容易拿到和创建,而通过cookie传递的就必须突破 浏览器的跨域cookie创建限制,当然如果需要实现跨域session创建的是可控制的服务端,那问题就迎刃而解了(不过该条件下的 解决方案有多种,例如互连星空就使用的URL转向方法)。PHP实现WebServices和跨域自动登陆具体例子就不详述了。
==========================================================
Passport跨域认证解决方法
非常简单的Passport跨域认证解决方法:
1、架设一个PASSPORT服务器(该服务器命名为A)。所有的用户验证都通过此服务器验证,其他服务器对用户信息的获取,用户的身份确认,都要通过这个服务器来实现。
2、在应用服务器(该服务器命名为B)的所有需要验证的地方判断用户信息是否已经验证,如果没有验证,则通过 IFRAME 在用页面放一个A服务器的验证页面,并传递一个A可以识别的标记参数,告诉A服务器是B服务器需要验证当前用户。
3、A服务器获得B服务器的页面请求后,首先检查当前用户是否登陆,如果没有登陆,则停止验证,或者反馈一个尚未登陆的页面。
4、如果A用户收到B服务器的也面请求后,发现当前用户已经登陆,则生成一个随机的长的字符串并在记录下该字符串、生成时间、对应的用户记录、B服务器的标记。然后通过自动跳转技术,访问B服务器上的一个用户信息验证页面,同时传递所生成的长字符串。(该页面由A从自身记录中获取,由事先录入);
5、B服务器的验证页面收到到所传递的长字符串后,在服务器端访问A服务器的服务器端信息确认页面,同时传递所收到的长字符串以及服务器标识。
6、A服务器的服务器端信息确认页面收到信息后,通过字符串与发出请求的服务器来验证信息的正确性:
(1)首先判断服务器IP是否属于该PASSPORT的服务服务器列表;
(2)通过字符串查询记录中是否有该字符串;
(3)通过请求服务器的IP与保留的服务器标记核对,看是否请求的IP地址是当前记录的服务器的;
(4)判断字符串的生成时间与当前时间比较,是否超时,超时的设置,在A服务器上设置;
(5)如果都核对无误,则返回对应的用户信息,否则反馈错误信息;
7、B服务器受到A服务器的确认信息后,根据确认信息的内容,判断用户是否登陆成功,如果登陆成功,则给当前用户分配SESSION。如果不成功,则返回空白或者重复刚才的进程,重新验证(重新验证需要记录次数,当次数超过一定量,则无条件停止验证,避免死循环)

Passport跨域认证解决方法 参考:
服务器端可控JS跨域访问解决方法
http://bbs.ad0.cn/viewthread.php?tid=302&extra=page%3D1
SSO - Single Sign-On Enterprise Security for Web Applications
http://bbs.ad0.cn/viewthread.php?tid=304&extra=page%3D1
单点登录的简单实现
http://bbs.ad0.cn/viewthread.php?tid=305&extra=page%3D1
PHP实现WebServices和跨域自动登陆
http://bbs.ad0.cn/viewthread.php?tid=307&extra=page%3D1
Passport跨域认证解决方法
http://bbs.ad0.cn/viewthread.php?tid=309&extra=page%3D1
Web应用跨域访问解决方案
http://bbs.ad0.cn/viewthread.php?tid=310&extra=page%3D1
Flex或Flash的跨域访问解决方案
http://bbs.ad0.cn/viewthread.php?tid=313&extra=page%3D1
跨域访问新方案-PHPRPC
http://bbs.ad0.cn/viewthread.php?tid=315&extra=page%3D1
SSO-单点登录完全解决方案
----最全的SSO解决方案,
AJAX跨域问题,IFrame跨域问题,Cookies跨域,session跨域问题,Js跨域问题,等常见跨域问题均有提及
Ajax跨域工具: Modello.ajax
---跨浏览器、跨域的Ajax工具

跨域访问新解决方案(跨域调用新方案)- PHPRPC
PHPRPC - perfect high performance remote procedure call
PHPRPC 是一个轻型的、安全的、跨网际的、跨语言的、跨平台的、跨环境的、跨域的、支持复杂对象传输的、支持引用参数传递的、支持内容输出重定向的、支持分级错误处理的、支持会话的、面向服务的高性能远程过程调用协议。
目前该协议的最新版本为 3.0。该版本目前已有以下几种语言的实现:
  • ASP:提供 JScriptVBScript 两种语言的支持。
  • ActionScript:提供 ActionScript 2.0 和 ActionScript 3.0 两个版本的支持。
  • Java:支持 JDK 1.4 以上的所有版本,它还支持 Google Android 开发包。
  • JavaScript:提供两个版本的实现,一个使用纯 Javascript 实现,另一个需要调用一个 swf 文件,两个版本都支持跨域的远程过程调用,但是使用 swf 的版本不限制参数长度,并且有更好的安全控制机制。这两个版本已经通过完整测试的浏览器包括 IE 5+Netscape 7+FirefoxMozillaOperaSafariEpiphanyCaminoKonqueror。并且纯 JavaScript 版本还通过了 Pocket IEOpera MiniOpera MobileiPhoneAndroid 等手持设备浏览器的测试。
  • .NET:支持 .NET 框架下所有的语言(如 C#VB.NETVC.NETDelphi.NET 等),并且支持目前所有版本的 .NET Framework.NET Compact Framework,当然它也支持 Mono
  • PHP:支持 PHP4PHP5,同样支持正处于开发阶段的 PHP6
  • Perl:目前该版本尚不成熟,有待完善。
其中 ASP、.NET、Java 和 PHP 版本除了提供客户端实现外,还提供了 服务器端实现。


PHPRPC 3.0 下载http://www.phprpc.org/download/phprpc_3.0.zip

PHPRPC 3.0各版本: http://www.phprpc.org/zh_CN/download/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值