如何发布访问REST API的jQuery代码,但要防止未经授权的使用

这个问题类似于这个问题:

开发API – 如何使其安全?

我想要的是在我的服务器上针对REST api开发基于jQuery的查询,以检索一些数据以便在网页上显示。

我希望网页的授权用户和jQuery能够访问这些数据,但不希望其他人能够复制该jQuery并将其放在他们的网站上以任何方式访问这些数据。 需要明确的是,这一切都发生在浏览器的客户端 – 没有涉及任何服务器端代码……

如果可能的话,实现这一目标的正确策略是什么?

我不希望查看网页的最终用户必须知道他们浏览器中发生的任何事情……

谢谢!

如果您不要求最终用户对您的站点进行任何类型的身份validation,那么您不能将其用作身份validation方法,并且您希望您的网页能够使用REST API而无需任何其他干预,那么安全的REST API并不是万无一失的。 如果您希望未经身份validation的浏览器中的数据,那么任何人都可以检索该数据。

还要记住,他们总是可以运行您的网页并从您的网页中解析数据,如果不需要身份validation来使用此网页,则数据已经可供公众使用。 如果不进行身份validation,您无法真正保护它。

有些事情你可以尝试让人们更难以使用你的REST API,尽管没有一个是万无一失的。 这些只是障碍,而不是安全。

  1. 您可以将过期的令牌放入您的网页,将其包含在Web请求中,然后在REST API中validation它是未过期的令牌。 这可以防止有人直接从另一个浏览器页面使用您的REST API(它们没有合法的令牌),但不会阻止服务器首先获取主机页面,检索令牌然后使用它来访问API 。

  2. 您可以尝试检查引荐来源,并仅执行说明来自您的域的网络请求。 这也不是万无一失的,因为推荐人可能会被欺骗,但这是一个障碍。

  3. 您可以使数据响应模糊不清,这样就不会立即明白如何解释返回的数据(加扰,加密等等)。 同样,这只是一个障碍,不会阻止一个坚定的黑客对您自己的代码如何解释响应进行逆向工程,但同样更多的工作会妨碍REST API的临时用户。

许多REST API所做的是要求每个API调用都使用accessKey 。 您的网页内置了一个accessKey。任何希望使用您的API(经过您的许可)的外部开发人员都会申请一个accessKey并将其授予他们(如果您希望他们能够使用您的API)。 然后,您的服务器仅允许来自已批准的accessKeys的访问请求。 如果您发现有一些恶意使用的accessKey,您可以关闭在您的服务器上使用该accessKey。 如果某人违反您的意愿使用您自己网页中的accesskey,则可以更改您放入自己网页的accessKey并撤消之前accessKey的权限。 显然,一些流氓开发人员可能会继续从您自己的网页中获取accessKey,但他们必须定期执行此操作才能定期使用您的API。 同样,它只是一个可以由一个坚定/知识渊博的开发人员克服的障碍,但它是关于公众已经可用的数据的最佳选择。

仅供参考,这是另一个类似的讨论: 如何限制JSON访问?