Javascript客户端身份验证(使用SSL,不使用OAuth2)?
情况是: 我有一个web API,由两个客户端访问: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应用程序来说,同样的解决方案不起作用。
- 用Javascript编写的Web应用程序,已缩小
- iOS应用程序
丹:这是不可能的。即使是oauth。即使假设你的iOS应用程序是安全的,也是错误的:它可以被反编译。客户机上运行的任何代码都可能被篡改,并且不能被信任为他所说的那个人 唯一的问题是:您提供的API是否足够有价值,以及有人想要通过多少麻烦来破解它。你想为任何想破解它的人付出多大的努力 iOS版本确实比javascript版本安全得多。在webapp中,你可以模糊你的代码,使其更难破解。您可以(如果您不打算在iOS上使用它)使用java或flash来进一步隐藏您的签名代码(HMAC对您的请求进行签名,而不仅仅是向它们发送共享机密。您可能认为SSL是安全的,但url加密之前还有一段时间……) “大人物”处理这件事的方式是:
- 无论您构建什么,都假设有人能够破解它(比如:将您的API用于您预期之外的其他用途)
- 想想这到底有多糟糕(注意:他们无法在此基础上建立业务;这太容易受到诉讼)。如果一只孤狼使用你的API,这真的是世界末日吗
- 如果你真的关心孤独的狼,那就尽可能地让它变得困难(但老实说,仅仅从孤独的狼身上挣钱不比花2个月的开发者时间更便宜吗?)
- 如果有人对入侵你的API非常感兴趣,试着与黑客达成谅解(例如,我喜欢Spotify对专制的反应。基本上,他们说:“嘿,如果你不发布任何东西,让盗取我们的音乐或绕过我们的商业模式变得非常容易,我们就不会试图阻止你”)