如何发布访问 REST api 的 jQuery 代码,但保护它免受未经授权的使用

Posted

技术标签:

【中文标题】如何发布访问 REST api 的 jQuery 代码,但保护它免受未经授权的使用【英文标题】:How to publish jQuery code accessing a REST api, but have it secured from unauthorized use 【发布时间】:2012-11-22 19:22:48 【问题描述】:

这个问题和这个问题类似:

Developing API - how to make it secured?

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

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

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

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

谢谢!

【问题讨论】:

您链接的文章描述了一种与oAuth 连接的方法。 oAuth 是一个开源身份验证平台,您可以使用它来验证您网站上的用户。它将返回一个token,您可以将其用于ensure,用户就是他们所说的那个人。此外,在创建的查询字符串中需要一个api_key=blahblahblah 参数,然后您就有了一个相当安全的系统来通过您的 RESTFUL api 提供数据。 【参考方案1】:

如果您不要求最终用户对您的网站进行任何类型的身份验证,因此您不能将其用作身份验证方法,并且您希望您的网页能够在没有任何其他干预的情况下使用 REST API ,那么就没有万无一失的方法来保护您的 REST API。如果您想在未经身份验证的浏览器中获取数据,那么任何人都可以检索该数据。

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

您可以尝试一些方法来让人们更难使用您的 REST API,但没有一种方法是万无一失的。这些只是障碍,而不是安全。

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

    您可以尝试检查引荐来源网址,并仅满足表明来自您的域的 Web 请求。这也不是万无一失的,因为引用者可以被欺骗,但它是一个障碍。

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

许多 REST API 的作用是要求在每个 API 调用中使用 accessKey。您的网页将内置一个 accessKey。任何希望使用您的 API(在您的许可下)的外部开发人员都申请一个 accessKey,然后您将其授予他们(如果您希望他们能够使用您的 API)。然后,您的服务器只允许来自批准的 accessKeys 的访问请求。如果您发现某个 accessKey 被恶意使用,您可以在您的服务器上关闭该 accessKey 的使用。如果您自己网页中的 accesskey 被他人违背您的意愿使用,那么您可以更改您在自己网页中放置的 accessKey 并撤销之前 accessKey 的权限。显然,一些流氓开发人员可以不断地从您自己的网页中获取 accessKey,但他们必须定期这样做才能定期使用您的 API。同样,这只是一个可以由坚定/知识渊博的开发人员克服的障碍,但对于已经向公众提供的数据,这是您可以做的最好的事情。

仅供参考,这是另一个类似的讨论:How to restrict JSON access?

【讨论】:

很好的答案...这就是我认为的情况...希望有人想出办法... :)

以上是关于如何发布访问 REST api 的 jQuery 代码,但保护它免受未经授权的使用的主要内容,如果未能解决你的问题,请参考以下文章

使用 AJAX jQuery 访问 Python Rest API

jQuery AJAX 访问 REST API JSON 数据

如何使用 javascript/jquery/AJAX 调用 Django REST API?

如何从 REST API 获取响应并从 jquery ajax 调用执行操作?

如何使用 ASP.NET MVC Rest API 调用和 jQuery Ajax 下载文件

如何从远程机器访问 REST API?