【问题标题】:Prevent webservice to be called from different Client App防止从不同的客户端应用程序调用 web 服务
【发布时间】:2010-08-27 02:08:12
【问题描述】:

我有这个网络服务在工作。对于该网络服务,我们部门开发了一个客户端来使用该网络服务。

我们要防止的是,他们开发任何其他客户端来使用它。

是否有任何算法和实践可以改进我们的客户端和 Web 服务通信,以验证消费客户端是我们的应用程序?

我有一个想法,我们可以开发一个关于时间(5 秒宽限期)的加密算法,该算法必须与服务器上计算的时间相匹配。

但我想确定的是,没有最佳实践......或者它仍然是一个好主意......

(对不起我的英语)

【问题讨论】:

  • 您是否会分发您的客户?
  • 我会将它分发给特定的客户(可能是 20 个客户)...我不希望他们开发自己的客户端来使用 Web 服务...
  • 为什么不呢?构建 API 和收费模型以鼓励创新不是更有意义吗?

标签: algorithm code-access-security


【解决方案1】:

我认为 Web 服务(例如基于 SOAP 或 REST)的部分意义在于发布一个接口,让您的服务可能被各种客户端实现使用(互操作性是 Web 服务的动机之一)。

如果您想锁定您的服务以供您的客户使用,将其作为“Web 服务”的唯一好处可能是您用来实现它的工具和库。您可能需要考虑这是否值得(确实有可能)。

如果您分发您的客户端应用程序,那么可能确保请求来自该客户端的任何保护机制都必须嵌入该客户端。因此,您嵌入的任何秘密机制都可能只会在一定程度上被混淆,但可以被更高级的用户破解。

【讨论】:

  • 我很确定一切都是易碎的,但如果路上有更多的石头,很多东西就会坐在一边......
  • 这真的取决于您的用户的技术能力。如果您使用共享机密发布某些东西,您最终会遇到与 DVD/CSS 保护系统相同的问题(破坏一个,破坏它们全部)。如果您使用私钥/证书(每个给定的应用程序一个)发送某些东西,如果您怀疑犯规,您可以撤销给定的证书。无论哪种方式,如果有人愿意反汇编代码,他们可能会找到密钥/私钥(您将无法很好地锁定它,因为您希望使用它)。
【解决方案2】:

您要查找的内容称为“身份验证”。

【讨论】:

  • 我可以给他们一个用户和密码,但是他们将能够开发自己的客户端应用程序......我会更好地要求一些“授权”算法......
  • 一种身份验证形式使用客户端证书。仅将证书分发给单个应用程序,并仅允许该证书。
  • 哦,听起来不错...任何想法在过期时从服务器更新这些证书?
  • 如果您使用客户端证书,问题是私钥必须可用并嵌入在客户端应用程序中,因此可以获取(可能需要付出一些努力)。
【解决方案3】:

您需要应用程序身份验证。对于基于 Web 的应用程序和服务,请尝试研究 2-legged OAuth。在 OAuth 中,您为每个访问您的服务的客户端应用程序提供一个 id 和一个秘密,并且每条消息都经过签名以提高安全性。

【讨论】:

    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    相关资源
    最近更新 更多