Javascript客户端身份验证(使用SSL,没有OAuth2)?

时间:2012-10-21 00:49:39

标签: javascript security api encryption ssl

场景是:

我有一个Web API,由两个客户端访问:

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

SSL都是在托管API的服务器上设置的,它运行正常。 API没有User Auth,因为它是一种基于位置的搜索应用程序。

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

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

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

谢谢! 丹

1 个答案:

答案 0 :(得分:2)

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

唯一的问题是:您提供的API是否足够有价值,以及有多少人会想要破解它。对于想要破解它的人来说,你有多难做到这一点。

iOS版本确实比javascript版本更安全。在webapp中,您可以对代码进行模糊处理,使其更难以入侵。您可以(如果您不打算在iOS上使用它)使用java或flash进一步隐藏您的签名代码(HMAC签署您的请求,不要只是发送共享密码。您可能认为SSL是安全的,但是在网址加密之前还有一段时间......)。

“大家伙”处理这个问题的方式是:

  • 无论你构建什么,都假设某人能够破解它(例如:将你的API用于其他目的而不是你的意图)。
  • 想想这到底有多糟糕(请注意:他们无法在其上建立业务;这对于诉讼很容易)。如果孤狼使用你的API,它真的是世界末日。
  • 如果你真的关心孤狼,尽量让它变硬(但老实说,从单独的狼身上掏出一些钱,而不是花费2个开发者月数就不便宜了吗?)
  • 如果以某种方式对黑客入侵你的API非常感兴趣,请尝试与黑客达成谅解(例如我喜欢Spotify对despotify的反应方式。基本上他们说“嘿,如果你不释放任何东西那么让我们很容易窃取我们的音乐或绕过我们的商业模式,我们不会太努力阻止你“)