【问题标题】:Expose url to webservice将 url 公开给 web 服务
【发布时间】:2010-04-13 15:09:14
【问题描述】:

在我们的项目中,我们想要查询文档管理系统以获取特定文档或电影。 dms 返回带有文档位置的 URL(例如:http://mydomain.myserver1.share/mypdf.pdfhttp://mydomain.myserver2.share/mymovie.avi)。

我们希望将文档公开给 Internet 用户和 Intranet 用户。请求的文件可能很大(大型视频文件)。

我们的架构是这样的:

请求类似于:webapp1 -> webapp2 -> webapp3 -> dms

响应如下:dms -> webapp3 -> webapp2 -> webapp1

webapp1 可能在互联网上。

由于安全问题,我一直在考虑如何混淆 dms 中的真实 URL。我已经看到其他 webapps 的实现,其中通过为特定于会话和用户的请求文档创建临时文件来混淆 pdf URL。所以其他用户无法轻易猜出其他用户的文档名。

我的问题:是否有一种模式可以处理向公众公开公司/用户的易受攻击数据?

我们的开发使用 C# 3.5。

【问题讨论】:

  • 在你的架构中,webapp1 是调用 dms 还是直接暴露 URI?
  • Webapp 1 是原始调用者,webapp2 是一个流程服务,它具有类型化的特定合同作为输入。然后,Webapp2 将此类型化的请求模式转换为由 webapp3 公开的非类型化请求模式(带有键值对)。 Webapp3 是一个 WCF 平台服务,具有无类型的通用键值模式,正在调用 dms 并等待 dms 的答复。

标签: c# wcf architecture


【解决方案1】:

处理它的最简单方法是创建一个 ashx 文件(或其他创建 URL 的方法)并让它为 pdf 提供服务。由于 WCF 支持 REST,因此您也可以始终通过它来完成它。只需将 pdf 加载到内存中并将字节内容推送到响应流中。

或者,您可能想研究这些:

http://www.microsoft.com/forefront/edgesecurity/isaserver/en/us/

http://www.isapirewrite.com/

【讨论】:

  • 这不是我们想要的。将数据推送到内存对每台服务器的内存来说是一个巨大的负载,因为一秒钟内有很多很多的请求,并且数据必须在使用之前通过许多 web 应用程序传输。我们想寻找一种方法,如何安全地将 URL 公开给调用者,这样其他调用者就无法通过 URL 猜测获取相同的数据
  • 为了提供 pdf,服务器必须以一种或另一种方式将其加载到内存中。它必须将其推送给客户。无论您是加载到内存中,还是让 IIS 为您完成,它都必须发生。
  • dms 还可以通过 url 公开其内部文件位置。但我们不想将那个“内部”位置暴露给公众。 WCF 服务必须将文件复制或加载为字节数组......但之后必须再次将文件作为新的 URL 位置发布,该位置必须仅由请求它的会话可用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多