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

Javascript客户端身份验证(使用SSL,不使用OAuth2)?,javascript,security,api,encryption,ssl,Javascript,Security,Api,Encryption,Ssl,情况是: 我有一个web API,由两个客户端访问: 用Javascript编写的Web应用程序,已缩小 iOS应用程序 SSL都是在托管API的服务器上设置的,并且工作正常。API没有用户身份验证,因为它是一种基于位置的搜索应用程序 不过,我想确保只有web应用程序和iPhone客户端才能真正向API发出请求。对于iPhone客户端来说,这很容易——服务器和应用程序之间共享一个秘密就可以了,而且它是用SSL加密的,所以我们不担心有人监视它 但对于web应用程序来说,同样的解决方案不起作用。

情况是:

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

  • 用Javascript编写的Web应用程序,已缩小
  • iOS应用程序
SSL都是在托管API的服务器上设置的,并且工作正常。API没有用户身份验证,因为它是一种基于位置的搜索应用程序

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

但对于web应用程序来说,同样的解决方案不起作用。我不能只在代码中留下一个字符串,即使它在那里被加密了,这也是人们所需要的

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

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

唯一的问题是:您提供的API是否足够有价值,以及有人想要通过多少麻烦来破解它。你想为任何想破解它的人付出多大的努力

iOS版本确实比javascript版本安全得多。在webapp中,你可以模糊你的代码,使其更难破解。您可以(如果您不打算在iOS上使用它)使用java或flash来进一步隐藏您的签名代码(HMAC对您的请求进行签名,而不仅仅是向它们发送共享机密。您可能认为SSL是安全的,但url加密之前还有一段时间……)

“大人物”处理这件事的方式是:

  • 无论您构建什么,都假设有人能够破解它(比如:将您的API用于您预期之外的其他用途)
  • 想想这到底有多糟糕(注意:他们无法在此基础上建立业务;这太容易受到诉讼)。如果一只孤狼使用你的API,这真的是世界末日吗
  • 如果你真的关心孤独的狼,那就尽可能地让它变得困难(但老实说,仅仅从孤独的狼身上挣钱不比花2个月的开发者时间更便宜吗?)
  • 如果有人对入侵你的API非常感兴趣,试着与黑客达成谅解(例如,我喜欢Spotify对专制的反应。基本上,他们说:“嘿,如果你不发布任何东西,让盗取我们的音乐或绕过我们的商业模式变得非常容易,我们就不会试图阻止你”)
好建议。谢谢,克劳德:)我以前从来没有自己写过API。我会记住这一点。我认为我最好的办法就是采取一些基本的反垃圾邮件措施,比如阻止同一个IP每10秒左右发出几个以上的请求。