我正在使用名为“Instafeed”的 JS 插件 https://github.com/stevenschobert/instafeed.js动态提取上传到 Instagram 帐户的最新图像。
我的目标是让这个为政府客户服务。我首先在自己的个人帐户上进行了测试,找到了我的用户 ID、客户端 ID 并生成了一个 token 。
<script type="text/javascript">
// Get the most latest instagram post and insert it into the page in the DIV# instafeed
var feed = new Instafeed({
get: 'user',
userId: '249842490',
accessToken: '249842490.1677ed0.0283e662751a4e369ae856f60a4b6228',
sortBy: 'most-recent',
resolution: 'low_resolution',
limit: 1,
clientId: 'dee7958de6a64ed284b95abb1619b790'
});
feed.run();
</script>
现在要获取客户端 ID,我必须在开发人员区域中创建一个应用程序。从 2016 年 6 月 1 日起,任何新应用程序都将被置于沙盒中并施加限制,直到经过审核并正确发布。 https://www.instagram.com/developer/limits/
一切都工作正常,并按应有的方式提取图像(例如 https://github.com/SLQ-web/Packery-Mockup-SLQ-Homepage/blob/Ryan's-Responsive-Spec/html/widget-social.html ),但 PM 向我询问了有关依赖项和漏洞的问题。我可以看到明显的依赖关系是 Instagram 帐户、Instagram 应用程序和 token 生成器。
我打算启用 Instagram 应用程序,因为 500/小时的速率限制对于页面获得的流量来说太小了。一旦 Instagram 应用程序上线,我的客户似乎非常担心安全性。
我无法回答的是安全风险,即谁可以使用该应用程序?出于什么目的?有人可以利用该应用程序来破解 Instagram 帐户吗?请注意,我正在为极度风险厌恶的客户工作。我只能假设,访问该页面的用户使用该应用程序,在该页面上,我有 Instafeed.js 调用该应用程序来生成要显示的内容。该应用程序不用于任何其他用途。
最佳答案
每当您在客户端上嵌入信息时,您都会面临任何有权访问该客户端的人以某种方式获取该信息的风险。这适用于网站、 native 移动应用程序等。
API 提供商(在本例中为 Instagram)知道这是一种风险,因此他们专门为您提供某种标识符组合(在您的情况下为 userId
、accessToken
和 clientId
),允许客户端应用程序发出请求,但监视与这些标识符相关的流量并提供流量限制、黑名单等功能。
这些类型的凭据非常有用,因为它们通常可以重置(如果您发现来自某个来源的一些奇怪流量,您只需重置您的 token 并重新部署您的应用程序)。
这种类型的东西属于“API管理”领域,并且这些功能非常常见。不幸的是,有人从您的客户端应用程序获取这些 key 的风险始终存在。
如果您的工作人员不希望人们获得这些凭据,您可以在客户端实现某种用户身份验证(当今最常见的方法之一是 OAuth,仅作为示例),并且一旦客户端进行身份验证,他们就可以调用您的服务器,服务器将包含 Instafeed
API 和 userId
、 accessToken
等。这只是在客户端和 Instagram 之间添加了一个额外的层,并允许您更好地控制谁从您的应用程序发出请求(它仍然无法消除那些会进行身份验证的恶意用户)从您的客户端应用程序,但至少它将 Instagram 的访问点保留在一个单独的位置,这将是您的服务器)。
关于javascript - 公众如何使用我的 Instagram 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37717744/