如何保护 RESTful WCF 服务,以便只有调用应用程序才能调用它们?

Posted

技术标签:

【中文标题】如何保护 RESTful WCF 服务,以便只有调用应用程序才能调用它们?【英文标题】:How are RESTful WCF services secured so that only the calling application can call them? 【发布时间】:2010-12-26 23:54:02 【问题描述】:

我有一个使用 Silverlight 和 ASP.NET 作为前端的应用程序。它通过调用托管在那里的一些 RESTful WCF 服务从服务器检索数据。我想阻止好奇的用户打开一个新的浏览器窗口并自己调用网络服务。有没有办法限制对特定应用程序的 Web 服务的访问?

谢谢!

【问题讨论】:

也许使用 .NET 4 和 Silverlight 的 netTcpBinding,你会有更多选择。 @marc_s - netTcpBinding 可能会有所帮助,但他至少可以通过 WS-Standards 实现基本的 UserName 令牌安全性(它在 Silverlight 中不是原生的......但有一个可能的实现)。 【参考方案1】:

您可以使用 HTTPS 来保护端点并要求身份验证。您可以在代码中嵌入一个令人讨厌的长密钥。不幸的是,System.Security.Cryptography 不在 SL 安装中,因此在服务器上没有加密/在客户端功能上没有解密。而且用户没有理由不能使用反射器之类的东西来读取代码。

SL 可以“最安全”,但绝对不安全。

【讨论】:

HTTPS 不会做任何事情——用户仍然可以浏览。 Silverlight 中的用户名和密码通常通过 Forms auth 完成,当打开另一个选项卡时,身份验证 cookie 仍然存在。正如你所说,钥匙是无用的,因为反射器会暴露它。 是的,充其量只是通过混淆的安全性。 HTTPS 仅用于使绝对不属于端点的人远离端点。 我很欣赏这些想法!【参考方案2】:

如果您真的对保护您的 Web 服务感兴趣,您应该考虑从 RESTful 服务迁移到基于 SOAP 的 Web 服务,并为基于消息的加密实施 WS-Security 标准。

然后您可以保护您的服务,以便只有拥有正确安全信息(用户名/密码或 X.509 证书)的客户端才能调用您的 Web 服务。

更新

如您所见...我已将 X.509 作为选项删除。我愣了片刻,忘记了 Silverlight 中的 WS-Security 限制。好消息是您可以在 Silverlight 中实现基于 WS-Security 标准的用户名令牌:

Implementing Username Password & WS-Security with Silverlight

【讨论】:

Silverlight 不支持 WS* 看到 ASP.NET...错过了 Silverlight。不过,有一些方法可以在 Silverlight 中实现基于 WS-* 标准的基本用户名/密码令牌安全性:geekswithblogs.net/SunnyCoder/archive/2009/03/15/…【参考方案3】:

这是 WCF 安全模式和实践团队的指南。那里有很多东西可以找到。

http://www.codeplex.com/WCFSecurityGuide

【讨论】:

【参考方案4】:

不,没有。

【讨论】:

本来会被缩短,但至少有 15 个字符 grin 我不同意。有一种称为身份验证的机制。您如何将 Web 应用程序的访问权限限制在地球上的一部分人口中?要求登录。服务也一样。 WCF RESTful 服务有点棘手,但有办法。 我知道这是一个老问题,但由于显而易见的原因,它会定期被标记。简短的一条衬里并不是特别有用,如果您可以扩展答案,那就太好了。如果它再次被标记,它可能会被删除。谢谢。

以上是关于如何保护 RESTful WCF 服务,以便只有调用应用程序才能调用它们?的主要内容,如果未能解决你的问题,请参考以下文章

仅由一个或两个客户端使用的 java 中保护 RESTful Web 服务的不同方法?

如何理解一个服务调用是“Restful 服务调用”还是“标准 wcf 调用”?

如何对 WCF 4 RESTful 服务进行身份验证?

如何在 WCF RESTful 服务上启用 HTTPS?

如何使用用户名/密码 + SSL 使用 WCF 配置安全 RESTful 服务

在 WCF 中获取调用者的主机名