【问题标题】:Authenticating with OAuth for Instagram without requiring a pop-up window使用 OAuth for Instagram 进行身份验证,无需弹出窗口
【发布时间】:2015-02-17 15:27:25
【问题描述】:

我正在尝试使用 OAuth for Instagram 进行身份验证,计划使用 PHP 和 cURL。第一步是检索“代码”,例如:

fd7d5f6cde6c47e4a86ba28b22ac4583

我之前使用过 Twitter API,它的工作方式类似。我将代码换成access_token,然后我就可以进行身份​​验证了。

问题在于,身份验证的方法是在显示“我授予权限”的窗口上点击一个按钮。这是那个窗口:

我的问题:有没有不需要点击这个 URL 的方法来做到这一点?

例如,有没有办法让我使用我的脚本来自动化这个过程?当我使用 Twitter 时,我能够使用 cURL 转到此链接并通过身份验证,然后检索此代码。

这是一个项目的一部分,仅供我自己使用,主要用于检索我自己最近的 instagram。我不希望我网站的访问者每次出现时都必须点击“授权”。

目前我只是这样做,有什么可以添加到 URL 以自动授权的吗?

$auth_request_url = 'https://api.instagram.com/oauth/authorize/?client_id='.$client_id.'&redirect_uri='.$redirect_url .'&response_type=code';
/* Send user to authorisation */
header("Location: ".$auth_request_url);

以下是有效但仅一次的代码示例:

$url = "https://api.instagram.com/oauth/access_token";
    $access_token_parameters = array(
        'client_id'                =>     $client_id,
        'client_secret'            =>     $client_secret,
        'grant_type'               =>     'authorization_code',
        'redirect_uri'             =>     $redirect_url,
        'code'                     =>     $code
    );

$curl = curl_init($url);    // we init curl by passing the url
    curl_setopt($curl,CURLOPT_POST,true);   // to send a POST request
    curl_setopt($curl,CURLOPT_POSTFIELDS,$access_token_parameters);   // indicate the data to send
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);   // to return the transfer as a string of the return value of curl_exec() instead of outputting it out directly.
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);   // to stop cURL from verifying the peer's certificate.
    $result = curl_exec($curl);   // to perform the curl session
    curl_close($curl);   // to close the curl session

    $arr = json_decode($result,true);

我从 URL 的末尾手动获得了 $code。但是用了一次就过期了。所以我需要弄清楚每次我想执行脚本时如何运行和检索$code

【问题讨论】:

  • 您应该能够在 PHP 中检索您自己的 Instagram,而不会在客户端出现任何 JavaScript 弹出窗口。这将需要一个 Instagram API 机密,它应该可以在没有看到此对话框的情况下正常工作。这看起来像您要求用户授权访问他们的帐户,这是非常不同的。
  • @halfer 这正是我所期待的。你能链接到文档中说我可以使用密钥和秘密进行身份验证的地方吗?我没有发现任何提及它。
  • 你在使用图书馆吗?有一个few GitHub results here 可能值得一试。 (我不能肯定地说,因为我没有使用过 Instagram 或其 API)。

标签: php curl oauth instagram instagram-api


【解决方案1】:

只有在您的客户第一次向用户提出要求时才需要批准,而且没有办法避免这种情况。您正在从最终用户那里获取信息,如果客户可以从用户那里获得该信息或权限,而无需至少一次明确的批准,那将是一个巨大的安全漏洞。但在第一次之后,应为您的客户存储和重复使用同意。

【讨论】:

  • 我不明白我怎么能做到这一点。这是我自己的网站,所以即使我启动并运行它,每次有人访问我的网站时,他们都会被要求登录我的 Instagram。这是如何运作的?他们将无法做到。
  • 如果您只想从您的应用访问 your instagram 数据,您应该通过“代码”流带外并将访问令牌存储在后端为您的应用程序;希望 instagram 也会提供一个刷新令牌,以便应用可以自主更新访问令牌
  • 这就是我所做的。我从 URL 中检索了代码,然后使用 cURL 发送了它。我能够很好地检索到 access_token。可能是,一旦该代码用完,就不能再使用了。所以每次我想执行调用时都必须重新生成一个代码。所以我需要自动化检索代码的过程。
  • 我已更新 OP 以显示我尝试过的代码。工作一次。我每次都需要检索一个新的$code。这是我无法理解的。
  • 是的,code 只能使用一次,它就是这样设计的;但是您可以在多个 API 调用中使用访问令牌更长的时间;我不确定 Instagram 的过期政策是什么。访问令牌,但如果它们也提供刷新令牌,您可以使用它来刷新访问令牌,而无需再次手动干预
【解决方案2】:

我知道这有点老了,但我认为:

https://api.instagram.com/oauth/authorize/?client_id='.$client_id.'&redirect_uri='.$redirect_url .'&response_type=code';之后

它将重定向到您的$redirect_url/?code=XXXXXXXXXXXXX

所以你可以通过$code = $_GET['code']检索代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-30
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    相关资源
    最近更新 更多