如果我正在主持一个WCF服务,从而使他人(即有人因为我知道我)可以消耗我的服务,但如果别人(即有人谁我不知道)消耗它,然后会做吗?如何防止呢?如何才能实现这一目标?

是否可以通过服务节流做或什么是实现这一目标的其他方式?

有帮助吗?

解决方案

没有,有一个在WCF没有机制来允许某些客户端使用您的服务,同时禁止其他人。你需要从不同的角度来处理这个。

的一种方式是从服务不自动发布元数据 - 例如使它几乎“隐形” - 然后分发在一个或几个WSDL和一个或多个XSD文件到你想连接到您的服务这些客户端的形式,必要的元数据信息。如果您的元数据不可用,有人只是浏览到您的服务地址不会得到什么叫任何信息。

元数据交换进行控制由<serviceMetadata>行为,并且通过具有上您服务“MEX”端点。删除这两个和你的服务是无形的。

另一种方法是禁止任何外部用户基于防火墙和网络规则来访问您的服务器WCF。这不能由WCF做,但您的网络管理员可能会限制该IP的有在您的WCF服务运行到机器的物理访问。

马克

更新:结果 为了出货元数据,以这些用户应该能够打电话给你的服务谁,你可以做两件事情之一:

1)使用svcutil.exe /t:metadata (path+name of your service assembly),可以从服务组件中提取元数据(例如MyServiceLibrary.dll)。这会给你一个或几个WSDL和一个或多个XSD文件,你需要运送到你的目标用户。他们可以某处将这些文件放在自己的硬盘,然后在“添加服务引用”,而不是输入网址发现该服务,他们可以在主WSDL的输入名称(其中进口的所有其他文件),他们会得到他们的客户端代理。

或者:

2)随着服务启动并运行,你可以“添加新项目”,以您的解决方案,选择一个类库(MyService.Client),然后做一个“添加服务引用”,并输入您的服务URL。这将在新的类库创建所有必要的文件和一切。编译该类库和船舶在装配MyService.Client.dll你要允许访问到您的服务用户。

使用这两种解决方案,你并不需要启用元数据交换,而别人不能随便走到你的服务,并获得订单所需的所有信息来调用它。

其他提示

如果你想一些有的客户能够使用(或视图)您服务,一些客户没有被允许使用(或视图)的服务,那么你需要设定验证您的服务,以便只有客户你允许可以访问(查看)为您服务。

我不知道你的整个方案,但运输安全使用基本身份验证可能就足够了。为了让你会禁用IIS匿名访问,IIS配置为使用基本身份验证,然后在绑定的配置设置:

<security mode="Transport">
  <transport clientCredentialType="Basic" />
</security>

,点击 设置您的MEX结合使用,而不是默认的mexHttpBinding安全绑定。 您还需要为您的网站的SSL证书(如果使用的WSHttpBinding)。

更新:下面是一个示例,定制安全元数据端点那演示如何实现一个安全的元数据端点的服务。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top