与Tinder Instagram Connect相似

时间:2016-04-02 00:04:27

标签: instagram instagram-api

所以我注意到像Tinder这样的应用程序可以显示Instagram连接,即用户A在其他人的手机上,甚至不需要其他用户实际登录Instagram。

例如:User-A连接instagram并获取访问令牌。用户-B,C,D ......可以看到A& A& amp;私人照片甚至没有登录Instagram。

有没有办法在不需要访问令牌的情况下查看其他用户的Instagram - 即使是使用CLIENT_ID的私有图片?

3 个答案:

答案 0 :(得分:4)

让我们不要混淆。 Tinder用户可以选择加入Instagram照片。 Tinder无法在全球范围内访问Instagram照片。我将从安全角度回答您,因为我从未尝试使用Instagram连接设置Tinder帐户来为您测试场景。实际上,根据我对Instagram APIs的理解,可能无法获得用户的隐私图片。但我可能是错的,所以让我继续讨论。

访问令牌嵌入在Tinder应用程序代码中,如果您根据混淆程度对代码进行反编译,您可能会发现它,如果使用mitmproxy等软件,几乎可以肯定。我不会在这里讨论这样的做法。

因此,Tinder客户端被授予访问用户图片的令牌。

用户选择在Tinder / Instagram上访问他的私人照片。单个访问令牌适用于选择加入Instagram的所有用户的图片。如果您窃取了Tinder的令牌,您可以访问任何Tinder-Instagram用户的私人照片。那不错。用户已选择与世界分享私人照片。但如果Instagram用户不是Tinder用户,请确保您没有得到任何东西

请注意,令牌对Tinder应用程序有效,不是用户A的令牌。安全措施禁止这样做。

通过将您的Tinder帐户与Instagram相关联,您授予 Tinder的已发行令牌,以代表访问您的照片

汇总:

  • Tinder客户 - 演员
  • Instagram - 资源服务器
  • 用户A的照片 - 资源
  • 用户B(在Tinder上,而不是在Instagram上) - 不是工作流程中的演员
  • 发给Tinder的令牌:访问选择在Tinder上分享Instagram照片的用户的任何(公共或私人??????)照片

注意:Tinder客户端可能可能不使用Instagram发布的令牌。从一般安全角度来看,有两种实施方案:

  1. Tinder客户端使用发给Tinder应用程序并在所有客户端中编码的令牌联系Instagram服务器
    • PRO:仅向用户收取带宽
    • CON:暴露令牌可以授予一个人访问任何Tinder-Instagram用户照片而不通过Tinder
  2. Tinder app请求Tinder服务器从Instagram获取照片。 Tinder客户端仅通过Tinder服务器进行身份验证
    • PRO:更安全的设计。 Tinder-to-Instagram令牌从未暴露过。如果用户离开Tinder他无法访问其他Tinder用户的Instagram照片
    • CON:Tinder服务器将按照检索和分发照片所需的带宽收费。如果他们开始缓存照片,这会使Tinder暴露于可能违反Instagram API ToS的行为

答案 1 :(得分:-1)

如果您想快速解决问题,我会在处理公开数据时不惜一切代价避免使用OAuth 。我会编写一个curl脚本来从用户的配置文件URL中获取公共Instagram数据,并解析HTML服务器端(或客户端)。

这是PHP中的一个快速模型示例,使用file_get_contentsDOMDocument

 //HTTP GET someone's profile (the easy way):
 $html = file_get_contents('https://www.instagram.com/profile_xxxxxx/');

 //Use PHP's built-in HTML parser
 $doc = new DOMDocument();
 $doc->preserveWhiteSpace = false;
 $doc->loadHTML($html);

 $selector = new DOMXPath($doc);

 //Instagram stores image URL's in meta tag "og:image"
 foreach($selector->query('//attribute::*[contains(., \'og:image\')]') as $e) {

   //Store profile photo from DOMNode $e
   $photourl = $e->getAttribute('content');

   //Grab profile photo
   file_get_contents($photourl);
 }

答案 2 :(得分:-2)

让我们考虑像ISS页面这样的Instagram用户个人资料页面可以在线使用而无需任何身份验证访问:

https://www.instagram.com/iss/

由于Instagram的运作方式,此处只会显示公开图片(以及帖子,帖子,关注者)。

所以你要做的就是获取页面数据。要做到这一点,你可以使用像PhantomJS这样的几个解决方案,就像写

一样
var page = require('webpage').create();
page.open('https://www.instagram.com/iss/', function() {
   var contents=page.contents; // here is the page contents
   phantom.exit();
});

因此,假设您可以在服务器端执行此过程,您可以在api响应中将这些公共配置文件图像作为JSON对象提供。当然它比这更复杂一点(即你必须等待页面资源在PhantomJS内加载,但最后网络刮刀可以临时保存页面并将其转换为json结构,<img/>源图像等已准备好在应用中显示。