Silverlight访问Web Service报"System.Security.SecurityException: 安全性错误"的处理
2010-06-28 16:01
323 查看
好几次了,执行的好好的Silverlight项目调用Web Service时报"System.Security.SecurityException: 安全性错误",如下图所示:
重新启动应用程序,OK!
再看看微软:
使服务跨域边界可用
使用 Silverlight 版本 4 进行跨域通信需要预防几种类型的安全漏洞,它们可被用于违法利用 Web 应用程序。“跨站点伪造”(Cross-site forgery) 作为一种利用手段,在允许跨域调用时会成为威胁。此利用手段包括在用户不知情的情况下向第三方服务传输未授权命令的恶意 Silverlight 控件。为了避免跨站点请求伪造,对于除图像和媒体之外的其他所有请求,Silverlight 在默认情况下只允许源站点通信。例如,在 http://contoso.com/mycontrol.aspx 上承载的 Silverlight 控件默认只能访问同一域中的服务(例如 http://contoso.com/service.svc),而不能访问位于 http://fabrikam.com/service.svc 的服务。这可以避免在 http://contoso.com 域上承载的恶意 Silverlight 控件对 http://fabrikam.com 域上承载的服务调用未授权操作。
若要允许 Silverlight 控件访问其他域上的服务,该服务必须明确选择允许跨域访问。通过选择,服务声明它公开的操作可以由 Silverlight 控件安全地调用,而不会对该服务存储的数据造成具有潜在危害的结果。
Silverlight 4 支持两种不同的机制供服务选择跨域访问:
在承载服务的域的根目录中放置一个 clientaccesspolicy.xml 文件,以配置服务允许跨域访问。
在承载服务的域的根目录中放置一个有效的 crossdomain.xml 文件。该文件必须将整个域标记为 public。Silverlight 支持 crossdomain.xml 架构的一个子集。
有关跨域访问的更多信息,请参见 Silverlight 2 中的网络安全访问限制。
创建允许访问该服务的 clientaccesspolicy.xml 文件。以下配置允许从任何其他域访问当前域上的所有资源。
复制
若允许从任何通过 HTTP 应用程序承载的 Silverlight 控件访问 HTTPS 服务,则需要将
标头特性的有效值包括:
通配符 (“*”) - 允许所有未列入黑名单的标头
允许标头的逗号分隔列表。这些允许的标头可以使用通配符后缀,例如,“X-CUSTOM-*”。
若允许通过 TCP 套接字访问服务,则将
将 clientaccesspolicy.xml 文件保存到承载该服务的域的根目录中。例如,如果该服务在 http://fabrikam.com 上承载,则文件必须位于 http://fabrikam.com/clientaccesspolicy.xml。
通过从其他域调用服务来测试是否已启用访问。
创建包含以下配置的 crossdomain.xml 文件。必须将该文件配置为允许从任何其他域访问服务,否则 Silverlight 4 将无法识别它。
复制
将 crossdomain.xml 文件保存在承载服务的域的根目录中。例如,如果该服务在 http://fabrikam.com 上承载,则该文件必须位于 http://fabrikam.com/crossdomain.xml。
通过从其他域调用服务来测试是否已允许访问该服务。
向 Microsoft 发送对本主题的评论。
版权所有 (C) 2010 Microsoft Corporation。保留所有权利。
重新启动应用程序,OK!
再看看微软:
使服务跨域边界可用
使用 Silverlight 版本 4 进行跨域通信需要预防几种类型的安全漏洞,它们可被用于违法利用 Web 应用程序。“跨站点伪造”(Cross-site forgery) 作为一种利用手段,在允许跨域调用时会成为威胁。此利用手段包括在用户不知情的情况下向第三方服务传输未授权命令的恶意 Silverlight 控件。为了避免跨站点请求伪造,对于除图像和媒体之外的其他所有请求,Silverlight 在默认情况下只允许源站点通信。例如,在 http://contoso.com/mycontrol.aspx 上承载的 Silverlight 控件默认只能访问同一域中的服务(例如 http://contoso.com/service.svc),而不能访问位于 http://fabrikam.com/service.svc 的服务。这可以避免在 http://contoso.com 域上承载的恶意 Silverlight 控件对 http://fabrikam.com 域上承载的服务调用未授权操作。
若要允许 Silverlight 控件访问其他域上的服务,该服务必须明确选择允许跨域访问。通过选择,服务声明它公开的操作可以由 Silverlight 控件安全地调用,而不会对该服务存储的数据造成具有潜在危害的结果。
Silverlight 4 支持两种不同的机制供服务选择跨域访问:
在承载服务的域的根目录中放置一个 clientaccesspolicy.xml 文件,以配置服务允许跨域访问。
在承载服务的域的根目录中放置一个有效的 crossdomain.xml 文件。该文件必须将整个域标记为 public。Silverlight 支持 crossdomain.xml 架构的一个子集。
有关跨域访问的更多信息,请参见 Silverlight 2 中的网络安全访问限制。
使用 clientaccesspolicy.xml 文件来允许跨域访问
构建允许 Silverlight 客户端访问的服务。有关如何执行此操作的更多信息,请参见如何:为 Silverlight 客户端生成服务。创建允许访问该服务的 clientaccesspolicy.xml 文件。以下配置允许从任何其他域访问当前域上的所有资源。
复制
<?xml version="1.0" encoding="utf-8"?> <access-policy> <cross-domain-access> <policy> <allow-from http-request-headers="SOAPAction"> <domain uri="*"/> </allow-from> <grant-to> <resource path="/" include-subpaths="true"/> </grant-to> </policy> </cross-domain-access> </access-policy>或者,如果只允许从其他域中的一个进行访问(例如 http://contoso.com),则将上面 clientaccesspolicy.xml 文件的
<allow-from>元素内的
<domain uri="*"/>行替换为
<domain uri="http://contoso.com"/>行。
若允许从任何通过 HTTP 应用程序承载的 Silverlight 控件访问 HTTPS 服务,则需要将
<domain uri=”http://*” />元素放入
<allow-from>元素。
标头特性的有效值包括:
通配符 (“*”) - 允许所有未列入黑名单的标头
允许标头的逗号分隔列表。这些允许的标头可以使用通配符后缀,例如,“X-CUSTOM-*”。
若允许通过 TCP 套接字访问服务,则将
<socket-resource port="4502" protocol="tcp" />添加到
<grant-to>元素,其中 4502 是承载服务的端口值。
将 clientaccesspolicy.xml 文件保存到承载该服务的域的根目录中。例如,如果该服务在 http://fabrikam.com 上承载,则文件必须位于 http://fabrikam.com/clientaccesspolicy.xml。
通过从其他域调用服务来测试是否已启用访问。
使用 crossdomain.xml 文件来允许跨域访问
构建允许 Silverlight 客户端访问的服务。有关如何进行此操作的更多信息,请参见如何:为 Silverlight 客户端生成服务。创建包含以下配置的 crossdomain.xml 文件。必须将该文件配置为允许从任何其他域访问服务,否则 Silverlight 4 将无法识别它。
复制
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-http-request-headers-from domain="*" headers="SOAPAction,Content-Type"/> </cross-domain-policy>
将 crossdomain.xml 文件保存在承载服务的域的根目录中。例如,如果该服务在 http://fabrikam.com 上承载,则该文件必须位于 http://fabrikam.com/crossdomain.xml。
通过从其他域调用服务来测试是否已允许访问该服务。
向 Microsoft 发送对本主题的评论。
版权所有 (C) 2010 Microsoft Corporation。保留所有权利。
相关文章推荐
- Silverlight点滴(四)Silverlight访问Web Service报"System.Security.SecurityException: 安全性错误"的处理
- silverlight升级 报"未经处理的错误 2104 错误"处理
- asp.net访问access 发生了未处理的异常 "操作必须使用一个可更新的查询"错误
- silverlight 访问 WCF 出现安全性错误的解决办法
- ArcGIS API for Flex制作程序发布后出现错误:"访问 URL 时遇到安全性错误" 解决办法尝试(学习笔记)
- 关于退域重新加域时,出现"拒绝访问"错误提示
- 操作系统错误 5:"5(拒绝访问。)
- 解决ASP.NET创建的线程的用户改变引发的"拒绝访问"错误
- Silverlight与WCF错误处理:Server Not Found(1)
- SpringMVC中出现" 400 Bad Request "错误(用@ResponseBody处理ajax传过来的json数据转成bean)的解决方法
- "2104 无法下载Silverlight应用程序" 错误解决办法
- [Android_Bug]处理PhoneGap Application Error: "The connection to the server was unsuccessful.(file:///android_asset/www/index.html)"的错误
- [原]C#错误解决-"Window无法访问指定设备,路径或文件..."
- 处理编译错误"0" is an invalid value for the "DebugInformation" parameter of the "DCC" task.
- 对路径" "的访问被拒绝XP中IIS下asp.net程序错误提示解决方案
- python 处理中文时出现的错误'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)" 解决方法
- 无法打开物理文件 "X.mdf"。操作系统错误 5:"5(拒绝访问。)"。 (Microsoft SQL Server,错误: 5120)解决
- sqlserver2008无法打开物理文件 操作系统错误5:"5(拒绝访问)"
- 无法打开物理文件 。操作系统错误 5:"5(拒绝访问。)"。 消息 5120,级别 16,状态 101,
- Nginx访问PHP文件的File not found错误处理,两种情况