保护 API 以与 Javascript 小部件一起使用

Posted

技术标签:

【中文标题】保护 API 以与 Javascript 小部件一起使用【英文标题】:Securing an API for use with Javascript widget 【发布时间】:2012-05-23 03:45:06 【问题描述】:

我正在编写一个将由博主/网站所有者安装的 javascript 插件。它将与我的远程 API 进行通信。

我想知道如何保护 API 以确保只有注册了服务帐户的用户拥有的域才能访问 API 中的资源。我已经阅读了 OAuth2 并了解了基础知识,但是因为该插件将在浏览器中运行,而不是从服务器到服务器,所以我不确定这有多安全。

mixpanel、谷歌分析、olark 等大量服务都使用相同的概念(即网站所有者在他们的网站上安装一行 JS),所以它一定是一个已解决的问题。

【问题讨论】:

你到底想防止什么? 试图阻止人们访问他们不应该访问的数据,例如我访问了一个我不拥有或控制的网站的谷歌分析数据。谷歌这样做,但如何?使用 OAuth? 否;谷歌不这样做。 Google Analytics 脚本不授予对任何数据的访问权限。 要回答您明显的问题,您可以使用任何登录系统。 【参考方案1】:

您可以在脚本中插入window.location 检查,以防止其他人直接将其从您的服务器中包含在内。

但是,无法阻止人们在本地下载脚本、取消保护,然后自行托管。

您可以在所有服务器端请求中要求 API 密钥,但敌人很容易从合法网站窃取 API 密钥。

【讨论】:

如果没有与我的 API 通信,该脚本将毫无用处。抱歉,我的问题有点含糊,我只是有点困惑我提到的服务是如何实现这一点的。 你提到的所有服务都不能返回任何信息。 SLaks 击中了它的头部。 GA 和 Mixpanel 小部件只发送数据,没有什么可以阻止任何网站使用给定的 GA 密钥来记录数据,除非他们无法访问有问题的数据(并且很容易为合法用户过滤)。在 Olark 案例中,数据确实会返回(即来自操作员的消息),但它是特定于会话的,而不是特定于经过身份验证的用户,所以同样适用(我是 Olark 的工程师,我们不做任何事情类似于 URL 验证,因为 SLaks 提到的原因,它最终将毫无用处)。

以上是关于保护 API 以与 Javascript 小部件一起使用的主要内容,如果未能解决你的问题,请参考以下文章

从 MySql 在 php 中创建 GeoJson 以与 MapBox javascript API 一起使用

ArcGIS API For JavaScript学习笔记

如何在 php 和 javascript 中创建小部件?

将 LiveChatInc 小部件与 NuxtJs 集成

根据 API 级别隐藏应用小部件

Android API指南之应用程序窗口小部件