搜档网
当前位置:搜档网 › 跨域用户认证接口规范

跨域用户认证接口规范

跨域用户认证接口规范
跨域用户认证接口规范

中国科学院数据应用环境建设与服务跨域用户认证接口规范

(征求意见稿)

中国科学院数据应用环境建设与服务项目组

2009年6月

目次

1 范围 (1)

2 规范性引用文件 (1)

3 术语和定义 (1)

4 符号与缩略语 (2)

5 数据格式定义 (2)

5.1 接口的编码方式及响应格式 (2)

5.1.1 接口编码方式 (2)

5.1.2 接口响应格式 (2)

5.1.3 接口响应请求状态码 (3)

6 接口规范 (4)

6.1 采用协议 (4)

6.2 接口安全 (4)

6.3 连接方式 (5)

6.4 技术实现 (5)

6.5 接口列表 (6)

6.6科学数据中心开放接口 (6)

6.6.1用户认证与授权接口 (6)

附录A (资料性附录) OpenURL (8)

附录 B 跨域用户单点登录客户端配置 (9)

1 系统环境 (9)

2 相关软件下载及安装 (9)

3 配置CAS客户端(JAVA) (10)

4 测试配置 (12)

5 具体应用中角色处理 (13)

跨域用户认证接口规范

1 范围

本规范规定了中国科学院数据应用环境建设与服务项目内跨域用户认证接口采用的协议,连接方式,调用参数以及数据的返回格式。

2 规范性引用文件

下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅所注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。

GB 18030-2005 信息技术中文编码字符集

3 术语和定义

下列术语和定义适用于本规范。

●资源 resource

可以被标识的实体对象或服务。

在本规范准中,特指可被标识的数据集、数据或服务。

●数据集 dataset

由相关数据组成的可标识集合。一个数据集可能是一个较小的数据集合,在物理上或逻辑上位于一个较大的数据集之内;反之,一个数据集也可能由若干数据集组成,是这些子数据集的父数据集。

本规范中,数据集指中国科学院数据应用环境建设与服务项目的主题数据库、参考数据库、专题数据库、专业数据库及其各级子库。

●服务 service

本规范中,服务是指数据应用环境建设与服务项目中数据集满足应用系统或者人的需要时,与之发生的“直接”接触行为及有关结果。

●标识符 identifier

用于标识数据对象或服务项目的一组字符。

4 符号与缩略语

URI 统一资源标识符(Uniform Resource Identifier)

URL 统一资源定位符(Uniform Resource Locator)

XML 可扩展标记语言(Extensible Markup Language)

5 数据格式定义

5.1 接口的编码方式及响应格式

5.1.1 接口编码方式

接口响应的数据基于xml语言格式,编码方式采用自定义编码的方式(常用编码方式包括:UTF-8、GBK、GB2312、ISO-8859-1等),接口响应数据所使用的编码方式必须在返回XML头信息的encoding属性中说明。

例如:

5.1.2 接口响应格式

请求服务响应的状态码

相关信息

5.1.3 接口响应请求状态码

以下状态码只列出接口中遇到的普遍问题,可根据数据库建库规范中规定的范围增加。

响应状态码返回格式:

响应请求状态码

响应请求状态码的描述

6 接口规范

6.1 采用协议

HTTP1.1(超文本传输协议)

超文本传输协议(HTTP)是一种为分布式,合作式,超媒体信息系统。它是一种通用的,无状态(stateless)的协议,除了应用于超文本传输外,它也可以应用于诸如名称服务器和分布对象管理系统之类的系统,这可以通过扩展它的请求方法,错误代码和报头来实现。HTTP的一个特点是数据表现形式是可输入的和可协商性的,这就允许系统能被建立而独立于数据传输。

HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.1 200 OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。

6.2 接口安全

采用基于IP地址的身份验证方式。在服务调用的过程中,服务提供者获取调用者的ip 地址,在本地保存的授权访问ip地址列表中查询,认证通过执行服务返回数据,不通过则拒绝服务。

认证流程如下图所示:

图6-1基于ip地址的身份认证方式

拒绝服务返回数据格式:

403

服务拒绝访问-ip地址认证未通过

6.3 连接方式

POST方式(必须实现):

POST 方法被用于请求源服务器接受请求中的实体作为请求资源的一个新的从属物。

POST方法的实际功能是由服务器决定的,并且经常依赖于请求URI(Request-URI)。POST提交的实体是请求URI的从属物,就好像一个文件从属于一个目录,一篇新闻文章从属于一个新闻组,或者一条记录从属于一个数据库。

POST方法的响应是可缓存的。

GET方式(可选):

GET方法意思是获取被请求URI(Request-URI)指定的信息(以实体的格式)。如果请求URI涉及到一个数据生成过程,那么这个生成的数据应该被作为实体在响应中返回,但这并不是过程的资源文本,除非资源文本恰好是过程的输出。

GET请求的响应是可缓存的。

6.4 技术实现

接口采用OpenURL技术实现,OpenURL技术规范详见附录3.1章节(OpenURL)。

接口语法格式说明:

http://url/service?[query]

[?]号前面为科学数据库参建单位提供的服务地址,需要在资源注册系统(https://www.sodocs.net/doc/ee4860256.html,)中注册。只有注册的服务科学数据中心才可以进行访问。

[query]部分包括多组参数名称与参数值,其中最主要的verb参数,定义了访问服务的具体名称见接口列表中的接口名称。

6.5 接口列表

本标准中接口列表如下:

6.6科学数据中心开放接口

6.6.1用户认证与授权接口

6.6.1.1 usrGetUser

接口说明:

用户授权接口,根据用户唯一标识获取用户基本信息。

请求参数说明:

verb:usrGetUser

userid:用户唯一标识

调用示例:

http://url/service?verb=usrGetUser&userid=user@https://www.sodocs.net/doc/ee4860256.html,

响应格式说明:

用户唯一标识

电子邮件地址

所在单位

注册时间

注册ip

响应格式示例:

test@https://www.sodocs.net/doc/ee4860256.html,

test@https://www.sodocs.net/doc/ee4860256.html,

注册用户真实姓名

科研院所研究人员

中国科学院计算机网络信息中心

北京市海淀区

(010)8123****

2009-01-01 17:38:46

159.226.3.***

附录A (资料性附录)OpenURL

参考地址:https://www.sodocs.net/doc/ee4860256.html,/wiki/OpenURL

语法格式:

OpenURL::= BASE-URL ‘?’ QUERY

BASE-URL:基础URL,服务提供方的URL地址

QUERY:查询,包含ORIGIN-DESCRIPTION(参数名称),OBJECT-DESCRIPTION(参数值)两部分。

附录B 跨域用户单点登录客户端配置

1 系统环境

1.浏览器:IE8、FireFox

2.CAS Client:windows XP或linux服务器

3.应用服务器:tomcat6.0.20

4.JDK1.6

2 相关软件下载及安装

1.安装JDK:下载JDK1.6的linux版本。

上传JDK至linux服务器,在jdk目录下安装JDK,其是是一个解压过程。

2.安装tomcat:官网下载apache-tomcat-6.0.20.tar.gz(linux版本)

上传tomcat至linux服务器,在对应目录下用命令:

tar zxvf apache-tomcat-6.0.20.tar.gz

解压tomcat

3.配置环境变量

编辑~/.bashrc文件里面设置环境变量

cd ~

ls –a

vi .bashrc

if [ -f /etc/bashrc ]; then

. /etc/bashrc

fi

export JAVA_HOME=JDK路径

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

export CATALINA_BASE=tomcat路径

export CATALINA_HOME= tomcat路径

4.测试环境

到tomcat的bin目录下面启动tomcat ./startup.sh

用netstat –ln|grep 8080 查看8080端口

输入http://ip:8080是否可以看到tomcat首页。

如果没有看到修改防火墙规则,开发8080端口。

service iptables stop

service iptables start

5.Windows下JDK和tomcat请自行安装。

3 配置CAS客户端(JAVA)

1.CAS官网下载cas-client-java-

2.1.1.zip,将编译好的类文件打包为

casclient.jar、把casclient.jar、commons-logging-api.jar拷贝到应用的WEB-INFO/lib目录下。同时下载cas-client-3.1.9-release.zip,把

cas-client-core-3.1.9.jar放置于WEB-INFO/lib目录。

2.为应用程序添加ServletFilter实现单点登录认证检查。

打开WEB-INFO/web.xml

配置单点登录

CAS Filter

edu.yale.its.tp.cas.client.filter.CASFilter

edu.yale.its.tp.cas.client.filter.loginUrl

https://服务器名称(eg:https://www.sodocs.net/doc/ee4860256.html,):8443/cas/login

edu.yale.its.tp.cas.client.filter.validateUrl

e>

https://服务器名称(eg:https://www.sodocs.net/doc/ee4860256.html,):8443/cas/serviceValidate

edu.yale.its.tp.cas.client.filter.serverName

客户端名称:port

CASFilter

登录action(eg:login.do或者index.jsp)

配置单点退出

org.jasig.cas.client.session.SingleSignOutHttpSessionL

istener

CAS Single Sign Out Filter

org.jasig.cas.client.session.SingleSignOutFilter

ass>

CAS Single Sign Out Filter

/*

注意事项:web.xml中的filter要注意先后顺序,CAS Single Sign Out Filter 相关配置要放在所有配置Filter的前面,同时单点退出的也要放在所有之前。

具体应用的退出方式:单击退出操作使其跳转到统一认证服务器,有认证服务器

统一处理。

跳转地址:https://服务器名称:8443/cas/logout

3.在客户端的JVM里导入信任的认证服务器导出的证书

通过运行cmd命令进$JAVA_HOME/jre/bin目录,运行

keytool -import -keystore $JAVA_HOME/jre/lib/security/cacerts -file

server.crt -alias tomcat

JVM路径可以替换为绝对路径

4 测试配置

1.在客户端输入http://客户端:port/应用名称。

2.单击登录跳转到统一认证登录页面,输入注册的用户名和密码,登录后转到具体

应用。

3.在输入另外的应用,可以直接取到用户名,而不需要在重新登录。

取用户名方式:

引入edu.yale.its.tp.cas.client.filter.*包

session.getAttribute(CASFilter.CAS_FILTER_USER)

4.在应用中单击退出,可以注销已登录用户。

5.单击注册按钮,跳转至https://https://www.sodocs.net/doc/ee4860256.html,:8443/cas/reg01.jsp进行统一注

册。

5 具体应用中角色处理

1.如果用户直接访问应用,而未触发登录操作,此时用户以匿名身份访问,可浏

览无需登录页面。

2.如果用户触发登录操作,而应用系统无角色划分,可以允许登录用户访问相关

页面,用户有统一认证系统管理。

3.如果用户触发登录操作,而且应用系统有角色划分,应用可根据用户名进行授

权处理,根据用户权限不同,访问不同页面。

具体实现:在登录时,根据返回的用户名,把用户名插入到本地应用中,有应用进行授权处理。

4.每个具体应用必须注册一个具有管理员权限的用户,应用对此用户进行特殊处

理,此用户可以对应用的其他用户就行权限管理。

解决js跨域问题

JSONP(JSON With Padding),就是打包在函数调用中的的JSON(或者包裹的JSON)。AJAX和JSONP在jQuery中的调用方式看起来极为相像,千万不要被这种现象迷惑,它们本质上有很大不同。AJAX是通过XMLHttpRequest对象获取非页面内容,而JSONP是动态的添加 3. 20. 21. 22. 23. 其中get.php的代码是

基于属性的访问控制(abac)的跨域访问控制面向服务的体系结构(soa)-毕设论文

理工学院 毕业设计外文资料翻译 专业:通信工程 姓名: 学号: 11L0751156 外文出处: 2012 International Conference On Computer Science And Service System 附件: 1.外文资料翻译译文;2.外文原文。

附件1:外文资料翻译译文 基于属性的访问控制(ABAC)的跨域访问控制面向服务的体系结构 (SOA) 摘要传统的基于角色的访问控制模型(RBAC)不能满足面向服务的需求架构(SOA)的分布和开放,基于属性的访问控制(ABAC)更多细粒度访问控制,更适合SOA是敞开的环境。本文提出了一种ABAC-based跨域访问控制系统中,安全域的与主题、对象属性、权力的环境属性访问决策的基础,消除集成基于SOA框架的约束RBAC,某种程度上提高了可伸缩性和可变更性的系统,解决了跨域访问控制的问题。 关键字:SOA,基于属性的访问控制(ABAC),访问控制 1. 整体介绍 面向服务的体系结构(SOA)是一种组织方法和使用分布式资源的灵活性组织和管理资源的分布不同的管理领域[1 - 2]。越来越高的对信息集成的需求,松散耦合的、开放的SOA从业务和吸引了越来越多的关注学术界[3]。但是SOA的发展也面临着许多问题,比如安全保障,以及如何整合环境检测服务和原始数据[4]。它在特定的SOA安全系统,开放性,跨域访问安全性呈现给我们的是一个巨大的挑战。 基于角色的访问控制(RBAC)是在一个更合适的独立的安全域,不适合跨域访问。基于主体统一服务认证系统[7],使用不同的方法来处理访问跨域访问,它解决了这个问题在跨域访问企业信息集成一定程度上,但它的基于角色的想法不能最后一个方法实现SOA的开放性和信息集成。 为了解决上述问题,本文提出了一种基于属性的访问控制(ABAC)的跨域访问控制系统,该系统应用的思想属性的访问控制跨域访问控制。该系统消除过程中的缺陷基于角色的访问控制应用于SOA的作用。 2.基于属性的访问控制(ABAC)

IBM跨域认证简单解决方案

跨域认证简单解决方案-使用第三方Cookie 概述 跨域认证,意味着用户在一个入口登录后可以无障碍的漫游到其它信任域。也就是所谓的单点登录(SSO)。对于大型的服务提供着,常用的方法有:使用安全断言标记语言(SAML)、基于公开密钥技术(PKI-Pubic Key Infrastructure)的Kerberos网络认证协议或者使用Windows采用的认证方案LanManager认证(称为LM协议-对于NT 安装Service Pack4以后采用NTLM v2版本)。这些认证方式需要单独的认证服务器,对于普通的使用者来说,既难已实现,也不太可能搭建单独的服务器。有没有一种简单又安全的认证方式呢? 本文的目标 使用Cookie和SHA1结合实现简单又安全的认证,如用户在https://www.sodocs.net/doc/ee4860256.html,中登录后,无需再次登录就可以 直接使用https://www.sodocs.net/doc/ee4860256.html,中提供的服务。 Cookie是什么 Cookie 是由Web 站点创建的小文本文件,存储在您的计算机上。这样,当您下一次访问该站点时,它可以自动获取有关您的信息,例如浏览喜好,或您的姓名、地址及电话号码。 关键词 SSO(Single Sign-On)-单点登录 SAML(Security Assertions Markup Language)-安全断言标记语言 Cross-Realm Authentication -跨域认证 PKI(Pubic Key Infrastructure)-公开密钥技术 SHA1(Secure Hash Algorithm 1)-安全哈希算法1 P3P(The Platform for Privacy Preferences)隐私参数选择平台 单一认证模型 1、用户使用a_logon.aspx登录服务器https://www.sodocs.net/doc/ee4860256.html, 2、在a_logon.aspx中自动嵌入iframe其src指向https://www.sodocs.net/doc/ee4860256.html,的b_auth.php 3、https://www.sodocs.net/doc/ee4860256.html,认证成功后在客户端写入Cookie,通过iframe调用b_auth.php 传递认证参数(经过SHA1后) 4、b_auth.php认证成功后在客户端写入认证Cookie 5、完成https://www.sodocs.net/doc/ee4860256.html,和https://www.sodocs.net/doc/ee4860256.html,的统一认证 问题: 上面提到的过程如果使用FireFox浏览器b_auth.php能够成功写入Cookie,如果使用IE6.0及 以上版本b_auth.php写入Cookie失败。 原因: IE 6.0支持P3P,IE 6的缺省隐私等级设置为"中"——即"阻止没有合同隐私策略的第三方 cookie"。而在用户浏览a_logon.aspx时https://www.sodocs.net/doc/ee4860256.html,写入的为第一方Cookie,其嵌入的iframe指向 b_auth.php 这时https://www.sodocs.net/doc/ee4860256.html,写入的就为第三方Cookie了,所以它是被IE当在了大门外。 解决方法: 让用户改变IE安全策略,允许第三方Cookie,这似乎很简单,可是用户会听你的吗?另一种 解决方法使用P3P,在b_auth.php中添加P3P头。网上google一下好像很多,本着不求甚解的原则 Copy来就是了。如下: header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"') 实现代码

runas应用,普通域用户的管理员权限

Runas的使用方法 域用户没有管理员权限,但是很多的软件却必须有管理员权限才能运行,不论你如何将C:D:E的安全策略调整至域用户“完全控制”的安全策略,不运行就是不运行。 XP虽然停止更新,但仍然是公司的主力。最近装了几台win7的系统,这个域用户没有权限的问题更加突出。于是穷尽各种搜索终于有了收获。使用runas命令可以解决域用户没有权限的问题。 本文只对新手,像我这样半路出家来当IT的人,将自己的经验分享也是无上的光荣啊。 Runas命令简介: Runas允许用户使用其他权限运行指定的工具和程序,而不是当前用户登录提供的权限。 是不是很拗口,不错。说白了就是允许你在当前登入的用户名下使用管理员的权限。 不多说走起。 Win7就是好,控制面板—用户—选项下面多了个—凭据管理功能,让你不再每次运行的时候输入密码,一次输入永久使用。 以域用户要运行QQ软件为例: 1、首先确认你的win7系统的本地或者域管理员用户名和密码有效。或者是具 有和管理员同等权限的其他用户也可。假设我们现在举例的管理员名称和密码均是:admin,本机名称为:dell-PC,系统域名为:dellserver 2、在电脑桌面的空白处,右击鼠标---新建---快捷方式----输入一下命令: Runas /user:dell-pc\admin /savecred “D:/program files(x86)/Tencent/QQ.exe”或者 Runas /user:dellserver\admin /savecred “D:/program files(x86)/tencent/QQ.exe”

3、在新建的快捷方式图标上右键—属性—更换图标为QQ的图标 4、在安全选项卡中,设置当前用户的权限为“读取”,运行,不允许修改。 5、将快捷方式,复制到没有权限的域用户桌面双击运行弹出命令窗口: 输入管理员密码一次。以后便不用再输入了,系统已经记住凭据了。 注意事项:1. runas 后面的空格。 2./user:dell-pc\admin 管理员用户名的反斜杠。 3. /savecred 保存凭证 以上是自己的一点收获分享了。

CORS(跨域资源共享) 的配置

兼容情况: 各种新版本的ie10,firefox,opera,safari,chrome以及移动版safari和Android浏览器 ie9及一下版本请使用flash方式来兼容 通过OPTIONS请求握手一次的方式实现跨根域发送请求,需要服务端配置 nginx增加类似如下配置: [html]view plaincopy 1.server { 2. location / { 3. if ($request_method = 'OPTIONS') { 4. add_header 'Access-Control-Allow-Origin' '*'; 5. add_header 'Access-Control-Allow-Credentials' 'true'; 6. add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; 7. add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep- Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Ty pe'; 8. # add_header 'Access-Control-Max-Age' 1728000; 9. add_header 'Content-Type' 'text/plain charset=UTF-8'; 10. add_header 'Content-Length' 0; 11. return 200; 12. } 13.} 如果没有nginx转发,java需要如下代码: [html]view plaincopy 1.rundata.getResponse().addHeader("Access-Control-Allow-Origin", "*"); 2.rundata.getResponse().addHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); 3.rundata.getResponse().addHeader("Access-Control-Allow-Headers", "Origin, No- Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Con trol, Expires, Content-Type, X-E4M-With");

域用户无法登录域故障处理(AD问题)

(AD 域用户无法登录域故障处理 问题)

系统故障记录 1. 故障记录日期:2010-01-14 2. 主机名及IP :FS03(192.168.2.246) 3. 主机系统及应用:DC、FileServer 4. 系统状态及错误信息:Win2003 系统启动到登陆界面时出现以下错误提示:“由于下列错误,安全帐户管理器初始化失败,目录服务无法启动。错误状态:0xc00002e1." 5. 检查过程及解决步骤: 原因:经微软KB及网上资料信息显示该提示为病毒(用户上传的文件)可能破坏了系统文件,导致 2.246 无法正常启动目录服务,所以客户端的域用户无法正常登陆。 解决方案1:准备进入目录还原模式,修复Active Directory 数据库。 备注:由于系统安装时间比较已久,还原密码未知, 解决方案2:升级其他BDC为PDC,解决用户登陆问题。 备注:现已将FSBDC升级为PDC,用户已可正常登陆。 步骤1: 用Domain Admin 用户登陆FSBDC,打开运行,输入“ CMD”进入命令行状态使用Ntdsutil 工具,将FSMO中PDC角色抢夺过来。

ntdsutil ROIeS COnneCtions COnneCt to SerVer FSBDC q SeiZe domain naming master SeiZe infrastructwre master SeiZe PDC SeiZe RlD master SeiZe SChema master q 步骤2: 升级FSBDC为GC 在管理工具中,打开“Active DireCtOry站点和服务” 点击"Sites-FOShan-SerVerS-FSBDC-NTDS Settings*右键点击选择属性, 选中“全局编目” [此帖子已被ekin. Iiu在2010-01-14 20:13:56编辑过]当前状态为[已登记]ekin?IiU 2010-01-14 20:18:51其他问题: 在升级GC的时候,碰到一个问题,因原有Xin. Xingfa. Cn的域信息没有完全清除,需要要清除后GC才能升级成功。 错误提示信息为: 1、

前端解决跨域问题的8种方案(最新最全)

1) 在https://www.sodocs.net/doc/ee4860256.html,/a.html中: document.domain = 'https://www.sodocs.net/doc/ee4860256.html,'; var ifr = document.createElement('iframe'); ifr.src= 'https://www.sodocs.net/doc/ee4860256.html,/b.html'; ifr.display= none;

document.body.appendChild(ifr); ifr.onload= function(){ var doc = ifr.contentDocument ||ifr.contentWindow.document; //在这里操作doc,也就是b.html ifr.onload = null; }; 2) 在https://www.sodocs.net/doc/ee4860256.html,/b.html中: document.domain = 'https://www.sodocs.net/doc/ee4860256.html,'; 这个没什么好说的,因为script标签不受同源策略的限制。 function loadScript(url, func) { var head = document.head || document.getElementByTagName('head')[0]; var script = document.createElement('script'); script.src=url; script.onload= script.onreadystatechange = function(){ if(!this.readyState || this.readyState=='loaded' || this.readyState=='complete'){ func(); script.onload= script.onreadystatechange = null; } }; head.insertBefore(script, 0); } window.baidu= { sug: function(data){ console.log(data); } } loadScript('https://www.sodocs.net/doc/ee4860256.html,/su?wd=w',function(){console.l og('loaded')}); //我们请求的内容在哪里? //我们可以在chorme调试面板的source中看到script引入的内容

AJAX使用XMLHttpRequest访问跨域问题解决

AJAX跨域访问的解决方法 Javascscript:使用web代理解决XMLHttpRequest跨域调用问题 XMLHttpRequest对象(IE、Firefox中的XMLHTTP对象)是当今尤其是ajax的web 应用程序的核心.但实际上,使用此对象来编写客户端web应用程序会在跨域的网络连接上受到web浏览器的严重限制. 为什么需要一个代理 web浏览器在网络连接的时候会强制执行一个安全限制,其中就包括调用XMLHttpRequest。此安全限制阻止脚本或者应用程序连接任何其他的不是来自本域的web服务(IE下可通过修改开启选项来允许跨域请求).如果你的web程序和程序使用的XML数据来自同一服务器,那不会有问题。 但是,如果你访问一个web服务器,而web服务器返回页面请求另外一个如Yahoo! Web Service这样的服务器,那么这个访问就会受到限制。

这个问题有很多解决方案,最通用的就是在你的web服务器上安装一个代理.你可以通过调用自己的web服务代理来代替直接调用其它服务器上的web服务,通过代理发起XMLHttpRequest请求,然后代理传递请求到web服务,并且返回客户端应用程序所需要的数据。因为所有数据来自你自己的服务器,所以你的浏览器不会受到什么限制。 出于安全考虑,你web服务器上安装的任何代理被限制使用是一个好主意.转发连接到任意网站url的开放式代理会被滥用。尽管很难限制连接只能来自你自己的应用程序,但是你可以阻止代理去连接那些你没有指定的服务器. Hard code the URL to connect to in the proxy itself 或者提供限制选项.这可以使得代理对不是你的客户端应用程序的用户较低的开放和较少的应用。 其他解决方案 除了通过使用web代理来转发应用程序的服务数据外,还有其他几种方式来绕过浏览器的跨域限制. ?使用阿帕奇的mod_rewrite or mod_proxy来从你的服务器上转发到另外的服务器.在你的客户端代码中你只要做请求就可以了,就好象工 作在你自己的服务器上-------不会有浏览器的限制问题.然后阿帕奇会 神奇的为你请求其他服务器. ?使用json或者动态