Silverlight 中的通信安全访问策略

Silverlight 支持使用 HTTP/HTTPS (System.Net.WebClient 等) 和 Socket (System.Net.Sockets) 两种方式访问远程服务器,但基于安全原因,对这些网络访问制定了严格的安全策略。

1. HTTP/HTTPS 访问策略

(1) 始终允许同域调用。同域是指调用必须使用同一子域、协议和端口,这是出于安全原因以及防止跨域伪造。
(2) Silverlight 支持访问包含跨域策略文件的网站服务。跨域访问时,Silverlight Application 首先在目标 Web 服务的根路径查找 Silverlight 跨域策略文件 (clientaccesspolicy.xml)。如果没找到(404 Not Found)或发生其他错误,将继续在根路径处查找 Flash 跨域策略文件 (crossdomain.xml)。
clientaccesspolicy.xml

Code

(3) 所有通信都是异步的。

(4) 仅支持 GET 和 POST 谓词。

(5) 支持大多数标准请求标头和所有自定义请求标头(必须是跨域策略文件中允许的标头)。

Code

(6) 只有 "200 OK" 和 "404 Not Found" 状态代码可用。

我们尝试用 WebClient 访问一个跨域网站。

Code

当目标网站没有提供策略文件时,你会看到错误信息。
在其根路径放置好 clientaccesspolicy.xml 后,访问正常。

 

2. Sockets 访问策略

创建一个供 Silverlight Application 连接的 Socket Server (非同域网站),必须符合以下安全策略。

(1) 监听 943 端口,为 Silverlight Application 提供策略文件(clientaccesspolicy.xml)。

(2) Socket Server 的服务端口范围必须在 4502 - 4534 之间。这是 Silverlight Application Socket 连接所允许使用的端口范围,否则连接失败。

我们写一个简单的 Time Server 作为演示。

Server CUI

Code

如果不启动服务器策略文件服务,或者端口不是 943,你会在客户端获得一个 AccessDenied 错误。
当然,如果服务器监听端口不再允许范围(4502 - 4534)内,同样也会触发这样一个错误。


本文来自CSDN博客http://blog.csdn.net/zjfei/archive/2009/07/27/4384368.aspx

posted on 2009-10-31 13:51  双宇  阅读(642)  评论(0编辑  收藏  举报