0

场景是:

我有一个 Web API,两个客户端正在访问它:

  • 用 Javascript 编写的 Web 应用程序,已缩小
  • iOS 应用

SSL 全部设置在托管 API 的服务器上,并且运行良好。API 没有用户身份验证,因为它是一种基于位置的搜索应用程序。

我想确保只有 Web 应用程序和 iPhone 客户端才能真正向 API 发出请求。对于 iPhone 客户端来说,这很容易——服务器和应用程序之间共享秘密就可以了,而且它使用 SSL 加密,所以我们不担心有人在监视它。

但是对于网络应用程序,相同的解决方案将不起作用。我不能只在代码中留下一个字符串,即使它在那里被加密,这也是有人需要的。

基本上,我正在寻找解决这个问题的好方法。我只是想确保它只保留给允许使用它的客户,但我不确定如果不去实施 OAuth 我怎么能这样做,我认为这可能是矫枉过正。有任何想法吗?

谢谢!担

4

1 回答 1

2

这是不可能的。即使有oauth。即使假设您的 iOS 应用程序是安全的,也是错误的:它可以被反编译。任何在客户端上运行的代码都可以被篡改,并且不能相信他所说的那个人。

唯一的问题是:您提供的 API 是否足够有价值,以及有人想通过多少麻烦来破解它。以及你想为想要破解它的人制作它有多难。

iOS 版本确实比 javascript 版本更安全。在 webapp 中,您可以混淆您的代码以使其更难被破解。您可以(如果您不打算在 iOS 上使用它)使用 java 或 flash 进一步隐藏您的签名代码(HMAC 对您的请求进行签名,不要只与他们发送共享密钥。您可能认为 SSL 是安全的,但是在 URL 被加密之前还有片刻......)。

“大佬”的处理方式是:

  • 无论您构建什么,都假设有人能够破解它(例如:将您的 API 用于您预期之外的其他目的)。
  • 想想这到底有多糟糕(注意:他们将无法在此基础上开展业务;这将太容易受到诉讼)。如果独狼使用你的 API,真的是世界末日吗?
  • 如果您确实关心孤狼,那就让它变得尽可能困难(但老实说,从孤狼那里损失一些钱不是比花 2 个开发者月的时间更便宜吗?)
  • 如果有人对侵入您的 API 产生了浓厚的兴趣,请尝试与黑客达成谅解(例如,我喜欢 Spotify 对 depotify 的反应方式。基本上他们说“嘿,如果你不发布任何使它真正的东西很容易窃取我们的音乐或规避我们的商业模式,我们不会太努力地阻止你”)
于 2012-10-21T14:17:37.323 回答