跨域或者Internet访问Remoting[Remoting FAQ]

[Remoting FAQ]

跨域或者Internet访问Remoting


Version


Date


Creator


Description


1.0.0.1


2006-6-1


郑昀@Ultrapower


草稿

 

继续阅读之前,我们假设您熟悉以下知识:

n         Remoting

[需求]

虽然说,Remoting一般都在同一个域内调用,但有时候,也需要跨域访问,甚至于跨Internet访问。毕竟,让第三方远程测试下Remoting方法,不能要求人家加入你的域。

[现象]

在走TCP Channel访问Remoting情况下。



如果双方未作特殊处理,那么客户端会得到如下异常,提示对方Remoting服务不能信任你的身份:


异常信息


Unhandled Exception:



System.Security.Authentication.InvalidCredentialException:
The server has rejected the client credentials.



---> System.ComponentModel.Win32Exception: 登录没有成功

[分析]

在《Remoting在FX2.0中的新特性》提到了这么一段话:

By default, a TCP client channel authenticates itself with the user identity under which the client process is running. You can specify an alternative identity by setting theuseDefaultCredentials configuration property to false and setting the domainusername, and password configuration properties to specify an alternative identity.

默认情况下,一个TCP客户通道以当前运行的客户进程之下的用户标识来验证。也可以通过把useDefaultCredentials 配置属性设为false 并且设置domainusername, and passwordconfiguration 配置属性来设置特定的自定义标识。

 

[解决]

有人说,可以在服务端在注册Channel时,这么做:

将原来的ChannelServices.RegisterChannel(chan1, true);

改为

ChannelServices.RegisterChannel(chan1, false);

如果是这样声明的:

RemotingConfiguration.Configure(filename, true);

改为

RemotingConfiguration.Configure(filename, false);

这样来允许另外一个域的机器访问。

       但是似乎没有作用。

 

       下面这种做法,就不需要服务器端作改动。客户端调用时,需要知道服务器端的一个普通用户帐号密码,来配置自己的remoting。

先看


客户端的Remoting配置信息


<system.runtime.remoting>



    <application>



      <client>



 



        <wellknown type="XXXX,YYYY"



                   url="tcp://RemotingServer:Port/Demo"/>



 



      </client>



      <channels>



        <channel ref="tcp" secure="true"   



                    impersonationLevel="Impersonation" protectionLevel="EncryptAndSign"         



                    username="RemotingServer-UserName" password="PASSWORD"         



                    domain="RemotingServer-DomainName">



          <clientProviders>



            <formatter ref="binary"/>



          </clientProviders>



          <serverProviders>



            <formatter ref="soap" typeFilterLevel="Full" />



            <formatter ref="binary" typeFilterLevel="Full" />



          </serverProviders>



        </channel>



      </channels>



    </application>



  </system.runtime.remoting>

       用这样的配置就可以成功模拟服务器端的用户调用Remoting。

 

      

[更多信息]

对于上面的配置信息,我们需要说明几个特别的节点:

Client-Settings

  • secure
    true/false: enables/disables security
  • username, password, domain
    if you don’t want to use the credentials of the client process, you can specify explicit ones here
  • impersonationLevel
    Identification: The server can use the client token only for identity information and role based checks 
    Impersonation: The server can impersonate the client token to access server-local resources
    Delegation: The server can delegate the client credentials
  • protectionLevel
    None: clear text
    Encrypt/Sign: self explanatory
    EncryptAndSign: recommended setting
  • servicePrincipalName
    SPN of the server. Required for Kerberos. Can use SPN (service/domain) or account syntax (domain\service)
时间: 2024-09-16 06:32:25

跨域或者Internet访问Remoting[Remoting FAQ]的相关文章

iframe与主框架跨域如何相互访问

1.同域相互访问 假设A.html 与 b.html domain都是localhost (同域) A.html中iframe 嵌入 B.html,name=myframe A.html有js function fMain() B.html有js function fIframe() 需要实现 A.html 调用 B.html 的 fIframe(),B.html 调用 A.html 的 fMain() A.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD H

P3P 和 跨域 (cross-domain) cookie 访问(读取和设置)_应用技巧

比如要访问b站在a站设置一个cookies,则可以这样做: 1.在b.com下建立一个文件cookies.htm 内容为: 复制代码 代码如下: <script language="javascript" src="http://a.com/setcookies.asp?par=a.com"></script> 2.a.com下的setcookies.asp的内容为: 复制代码 代码如下: <% Response.AddHeader &

P3P 和 跨域 (cross-domain) cookie 访问(读取和设置)

比如要访问b站在a站设置一个cookies,则可以这样做: 1.在b.com下建立一个文件cookies.htm 内容为: 复制代码 代码如下: <script language="javascript" src="http://a.com/setcookies.asp?par=a.com"></script> 2.a.com下的setcookies.asp的内容为: 复制代码 代码如下: <% Response.AddHeader &

深入浅析同源策略和跨域访问_javascript技巧

1. 什么是同源策略      理解跨域首先必须要了解同源策略.同源策略是浏览器上为安全性考虑实施的非常重要的安全策略.     何谓同源:         URL由协议.域名.端口和路径组成,如果两个URL的协议.域名和端口相同,则表示他们同源.    同源策略:         浏览器的同源策略,限制了来自不同源的"document"或脚本,对当前"document"读取或设置某些属性. (白帽子讲web安全[1])         从一个域上加载的脚本不允许访

asp.net结合html,javascript实现无刷新跨域数据提交

需求: A域有页面a.html,其中有iframe包含B域的页面b.html,现在要通过a.html上的一个按钮,来把a.html页面上一个文本框的值传递到b.html页面的文本框. 注:这里b.html是html网页,不能接收其他网站post过来的值,所以不能用直接post的方法来传值,但是,如果接收页面是b.aspx或者b.asp 呢,那不是可以直接post了么?答案是肯定的,确实可以,但是b.asp或b.aspx必须要刷新,才可以,如何能不刷新的动态改变接收页的元素或者值呢?(IE的本地项

Ajax跨域请求 JSON JSONP

同源策略和跨域-总结 目录: 1.同源策略 2.跨域 3.几种跨域技术   1.同源策略 什么叫同源? URL由协议.域名.端口和路径组成,如果两个URL的协议.域名和端口相同,则表示他们同源.相反,只要协议,域名,端口有任何一个的不同,就被当作是跨域. e.g. 对于http://store.company.com/dir/page.html进行同源检测: URL 结果 原因 http://store.company.com/dir2/other.html 成功 仅路径不同 http://st

跨域资源共享(CORS)安全性浅析

一.背景提起浏览器的同源策略,大家都很熟悉.不同域的客户端脚本不能读写 对方的资源. 但是实践中有一些场景需要跨域的读写,所以出现了一些hack的方式来跨域.比如在同域内做一个代理,JSON-P等.但这些方式都存在缺陷,无法完美的实现跨域读写.所以在XMLHttpRequest v2标准下,提出了CORS(Cross Origin Resourse-Sharing)的模型,试图提供安全方便的跨域读写资源.目前主流浏览器均支持CORS.二.技术原理CORS定义了两种跨域请求,简单跨域请求和非简单跨

ajax跨域调用webservice的实现代码_javascript技巧

最近ajax访问webservice遇到跨域的问题,网上搜索资料,总结如下(很多都是觉得人家总结不错的复制下来) <<用JSON来传数据,靠JSONP来跨域>> 先上我的已实现代码: 前端代码: $.ajax({ type: "get", url: "http://localhost/Service1.asmx/getElevatorStatusJsonData?jsoncallback=?", dataType: "jsonp&q

跨域请求的完美解决方法(JSONP, CORS)_基础知识

一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题.解决方法有JSONP,Flash等等. JSONP 我们发现,Web页面上调用js文件时不受是否跨域的影响,凡是拥有"src"这个属性的标签都拥有跨域的能力,比如<script>.<img>.<iframe>.那就是说如果要跨域访问数据,就服务端只能把数据放在js格式的文件里.恰巧我们知道JSON可以简洁的描述复杂数据,而且JSON还被js原生支持,所以在客户端几乎可以随心所欲的处