gpt4 book ai didi

winforms - WinForms 客户端和共享主机 Web 服务器之间的 WCF 安全性

转载 作者:行者123 更新时间:2023-12-02 21:54:43 26 4
gpt4 key购买 nike

好的,

我开发了这个 WinForms 客户端,它通过 WCF 调用与服务器(ASPX 应用程序)进行交互。我现在想将服务器部署到我的共享虚拟主机,但我对 WCF 有点陌生,尤其是它背后的安全可能性。

目标是保护 WCF 服务的安全,以便不是每个知道或找到端点地址的人都可以调用它。相反,只有我的 WinForms 客户端必须能够调用 WCF 服务。

我不需要基于用户的身份验证,因此客户端的用户不需要身份验证。 但是我只希望此 WinForms 客户端的实例能够与服务交互。服务器和客户端之间传递的信息不是很敏感,因此实际上不需要保护它,但这是一个优点如果可以轻松完成的话。

这可以在共享主机 (IIS) 环境中实现(没有可用的 HTTPS)吗?我应该使用哪些绑定(bind)和选项?我想是 wsHttpBinding,但是我将如何设置安全选项?

使用.NET 4.0

谢谢

最佳答案

据我了解,您有一个面向互联网的服务,您希望将其限制为仅您的客户端应用程序能够调用 - 对吗?或者您是否设想其他客户端(例如 PHP、Ruby 等)也希望在某个时刻调用您的服务?

为了保护您的消息,您在 WCF 中有两个选项 - 消息安全或传输安全。在互联网上,由于客户端和服务之间的跃点数量未知,传输安全性不起作用 - 您只剩下消息安全性(在消息通过“网络”传输时对消息进行加密)。为此,您通常将数字证书添加到您的服务(仅限服务器端),客户端可以发现该数字证书并使用它来加密消息。只有您的服务才能解密它们 - 因此您在这方面是安全的。

下一点是:谁可以调用您的服务?如果您想对任何人完全开放,那么是的,您需要 wsHttpBinding (或 RESTful 变体 - webHttpBinding)。如果您想允许非 .NET 客户端,则通常仅限于不进行身份验证(任何人都可以调用)或用户名/密码方案,您将在服务器端根据有效用户的数据库对其进行验证。

如果您只想允许自己的 .NET 客户端进入,那么您可以执行以下操作:

  • 禁用您服务上的元数据;这样,您将“隐藏”您的端点及其提供的服务 - 使用“元数据扫描仪”(如果存在)的人将无法偶然发现您的服务并找出它提供的方法等。但是,这还使得组织外部的其他开发人员无法对您的服务添加服务引用。

  • 您可以定义和使用自定义二进制 http 绑定(bind) - 只有具有此设置的其他客户端才能调用您的服务。二进制 http 绑定(bind)也会带来一些速度提升。看这个blog post关于如何做到这一点。

  • 您需要以某种方式识别允许的调用者 - 一种可能的方法是将额外的 header 放入您的 WCF 消息中,然后在服务器端检查该 header 。这将简单地确保发现您的服务并找出二进制 http 绑定(bind)的休闲黑客仍然会被拒绝(至少在一段时间内)。看这个blog post here了解如何为 WCF 实现此类消息检查器扩展。

  • 最终步骤是在客户端计算机上安装数字证书以及您的服务。然后,您将设置客户端代理以使用该证书对服务进行身份验证。只有拥有该证书的客户端计算机才能调用您的服务。

这实际上取决于您想走多远 - WCF 为您提供了很多选择,但您需要决定要为此付出多少努力。

关于winforms - WinForms 客户端和共享主机 Web 服务器之间的 WCF 安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3274645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com