如何获得 Instagram 访问令牌

Posted

技术标签:

【中文标题】如何获得 Instagram 访问令牌【英文标题】:How to get an Instagram Access Token 【发布时间】:2013-05-05 23:30:14 【问题描述】:

我真的在为而苦苦挣扎,

我已经注册了一个新客户端,然后我使用了这个 URL

https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code

填写客户ID并重定向Url。

然后我被重定向到在 URL 中显示代码的页面,但从那里我不知道 id 从哪里获取我的访问令牌。

【问题讨论】:

真的迟到了,但我最近不得不再做一次,所以创建了一个教程(准备好当我必须再做一次时)见:bobmckay.com/web/… jelled.com/instagram/access-token 用您的帐户获取一份instagram.pixelunion.net ...超级简单。 【参考方案1】:

在您授权应用程序使用您的 Instagram 数据后,访问令牌将作为 URI 片段返回。它应该如下所示:

【讨论】:

我仍然完全迷失了,我基本上只是将我的 Instagram 提要拉到我的网站上,所以我不知道如何获得你上面显示的内容 尝试获取访问令牌时有两个流程。对于初学者来说,使用“客户端(隐式)身份验证”似乎最容易。如果不知道您尝试过什么,或者不知道您究竟卡在哪里,很难为您指明正确的方向。几周前我写了一篇简短的博客,可能会有所帮助。 symmetricinfinity.com/2013/04/06/… 真的迟到了,但我最近不得不再次这样做,所以创建了一个教程(准备好当我必须再次这样做时),请参阅:bobmckay.com/web/… 在这种情况下使用 javascript。 access_token = location.hash.replace('#access_token=','');【参考方案2】:

试试这个:

http://dmolsen.com/2013/04/05/generating-access-tokens-for-instagram/

获取代码后,您可以执行以下操作:

curl -F 'client_id=[your_client_id]' -F 'client_secret=[your_secret_key]' -F 'grant_type=authorization_code' -F 'redirect_uri=[redirect_url]' -F 'code=[code]' https://api.instagram.com/oauth/access_token

【讨论】:

redirect_URL 到底是什么?我在 Instagram 开发者面板的管理帐户中找不到它 Redirect_URL 是 Instagram 响应返回的 URL。所以它不在开发者面板中。它是您创建的用于在您的应用/网站中获取响应的方法。【参考方案3】:

如果您正在寻找说明,请查看这篇文章 post。如果您使用的是 C# ASP.NET,请查看此repo。

【讨论】:

它消失了……degs.io 消失了。【参考方案4】:

这对我来说效果很好:

http://jelled.com/instagram/access-token

仅供参考,我将它与您可以在此处找到的 jQuery Instagram 插件结合使用; http://potomak.github.com/jquery-instagram

【讨论】:

您能否编辑您的答案以提供更实质性的解释?仅链接的答案往往会吸引密切投票。 不幸的是,Instagram 让他关闭了他的网站。不过它曾经很好用。【参考方案5】:

官方 API 文档的链接是http://instagram.com/developer/authentication/

长话短说 - 两步:

获取代码

使用来自http://instagram.com/developer/clients/manage/ 的信息打开https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code

获取访问令牌

curl \-F 'client_id=CLIENT-ID' \
    -F 'client_secret=CLIENT-SECRET' \
    -F 'grant_type=authorization_code' \
    -F 'redirect_uri=YOUR-REDIRECT-URI' \
    -F 'code=CODE' \
    https://api.instagram.com/oauth/access_token

【讨论】:

这是唯一对我有用的东西。上面的其他答案不再起作用。我在这里遵循了本教程dmolsen.com/2013/04/05/generating-access-tokens-for-instagram 是否可以直接从https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code获取代码?或者我真的需要另一个端点来捕捉代码返回?这很复杂,很烦人 如果您将 response_type 设置为 token 它可以工作。它不适用于我的代码。 @aokaddaoc 您不需要另一个端点,Instagram 将重定向到该 URI,并在 URL 上传递令牌,如 http://your-redirect-uri#access_token=ACCESS-TOKEN 现在 instagram 更改了它的 api 我们无法获取代码【参考方案6】:

我之前也遇到过同样的问题,但是我把网址改成了这个https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token

【讨论】:

是的! - 这行得通 - 就 instagram 现在的工作方式而言,它应该是针对不太安全的基于服务器的请求的最佳答案。示例:我只需要获取用户的最后几张图像。 - 在您的 Instagram 开发人员页面的安全选项卡中取消选中禁用隐含 OAuth。 - 使用上面带有替换值的 URL - 从重定向 URI 中获取 access_token 现在你可以做一些简单的事情,比如 api.instagram.com/v1/users/[CLIENT ID]/media/recent/?access_token=[TOKEN] 这些无论如何都不需要那么安全 - instagram 有类似这样的复杂请求。【参考方案7】:

到目前为止,人们发布的几乎所有回复都只涉及如何在前端处理访问令牌,遵循 Instagram 的客户端“隐式身份验证”程序。根据 Instagram 的 API 文档,此方法不太安全且不推荐使用。

假设您使用的是服务器,Instagram 文档在提供有关将代码交换为令牌的明确答案方面有点失败,因为它们仅提供了 cURL 请求的示例。本质上,您必须使用提供的代码和应用程​​序的所有信息向他们的服务器发出 POST 请求,他们将返回一个用户对象,包括用户信息和令牌。

我不知道您用什么语言编写,但我在 Node.js 中使用 request npm 模块解决了这个问题,您可以找到 here。

我解析了 url 并使用此信息发送了 post 请求

var code = req.url.split('code=')[1];

request.post(
   form:  client_id: configAuth.instagramAuth.clientID,
            client_secret: configAuth.instagramAuth.clientSecret,
            grant_type: 'authorization_code',
            redirect_uri: configAuth.instagramAuth.callbackURL,
            code: code
          ,
    url: 'https://api.instagram.com/oauth/access_token'
  ,
  function (err, response, body) 
    if (err) 
      console.log("error in Post", err)
    else
      console.log(JSON.parse(body))
    
  
);

当然,用您自己的信息替换 configAuth 的东西。您可能没有使用 Node.js,但希望此解决方案能帮助您将自己的解决方案翻译成您使用的任何语言。

【讨论】:

【参考方案8】:

Instagram API 不仅适用于您,也适用于任何可能使用您的应用进行身份验证的 Instagram 用户。我关注了instructions on the Instagram Dev website。使用第一种(显式)方法,我可以在服务器上轻松完成此操作。

第 1 步)向您的网页添加一个链接或按钮,用户可以点击该链接或按钮来启动身份验证过程:

<a href="https://api.instagram.com/oauth/authorize/?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&response_type=code">Get Started</a>

YOUR_CLIENT_IDYOUR_REDIRECT_URI 将在您成功在 Instagram 后端注册您的应用后提供给您,以及下面使用的YOUR_CLIENT_SECRET

第 2 步) 在您为应用定义的 URI(与 YOUR_REDIRECT_URI 相同)处,您需要接受来自 Instagram 服务器的响应。 Instagram 服务器将在请求中反馈给您一个 code 变量。然后您需要使用此code 和有关您的应用程序的其他信息直接从您的服务器发出另一个请求以获取access_token。我使用Django框架在python中做了这个,如下:

将 django 定向到 urls.py 中的 response 函数:

from django.conf.urls import url

from . import views

app_name = 'main'
urlpatterns = [
        url(r'^$', views.index, name='index'),
        url(r'^response/', views.response, name='response'),
]

这里是response函数,处理请求,views.py

from django.shortcuts import render
import urllib
import urllib2
import json

def response(request):
    if 'code' in request.GET:
        url = 'https://api.instagram.com/oauth/access_token'
        values = 
            'client_id':'YOUR_CLIENT_ID',
            'client_secret':'YOUR_CLIENT_SECRET',
            'redirect_uri':'YOUR_REDIRECT_URI',
            'code':request.GET.get('code'),
            'grant_type':'authorization_code'
        
        data = urllib.urlencode(values)
        req = urllib2.Request(url, data)
        response = urllib2.urlopen(req)
        response_string = response.read()
        insta_data = json.loads(response_string)
        if 'access_token' in insta_data and 'user' in insta_data:
            #authentication success
            return render(request, 'main/response.html')
        else:
            #authentication failure after step 2
            return render(request, 'main/auth_error.html')
    elif 'error' in req.GET:
        #authentication failure after step 1
        return render(request, 'main/auth_error.html')

这只是一种方式,但该过程在 php 或任何其他服务器端语言中应该几乎相同。

【讨论】:

【参考方案9】:

通过使用https://www.hurl.it/,我可以看到: “代码”:400, "error_type": "OAuthException", "error_message": "匹配代码未找到或已被使用。"

所以:您必须为每个请求获取新代码。

【讨论】:

【参考方案10】:

2019 年行之有效的简单方法

在安全身份验证下禁用隐式 oauth,然后加载:

https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token

在您的帐户中指定 REDIRECT-URI 并完全按照指定输入。

【讨论】:

【参考方案11】:

如果您不想构建服务器端,例如仅在客户端(Web 应用或移动应用)上进行开发,您可以选择 Implicit Authentication

正如文档所说,首先使用 https 请求

https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token

填写您指定的CLIENT-IDREDIRECT-URL

然后进入登录页面,但最重要的是 是用户正确登录后如何获取访问令牌。

用户使用正确的帐号和密码点击登录按钮后, 网页将重定向到您指定的 url,后跟一个新的访问令牌。

http://your-redirect-uri#access_token=ACCESS-TOKEN

我不熟悉javascript,但是在android studio中, 这是添加侦听器 侦听网页覆盖 url 到新 url(重定向事件)的事件的简单方法, 然后它将重定向 url 字符串传递给您,因此您可以轻松地将其拆分以获取访问令牌,例如:

String access_token = url.split("=")[1];

意思是将url分解成字符串数组中的每个“=”字符,那么访问令牌显然存在于[1]处。

【讨论】:

【参考方案12】:

进入管理clinet页面:

http://www.instagram.com/developer/

设置重定向网址

然后:

使用此代码获取访问令牌:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>tst</title>
<script src="../jq.js"></script>
<script type="text/javascript">
       $.ajax(
            type: 'GET',
            url: 'https://api.instagram.com/oauth/authorize/?client_id=CLIENT-‌​ID&redirect_uri=REDI‌RECT-URI&response_ty‌pe=code'
            dataType: 'jsonp').done(function(response)
                var access = window.location.hash.substring(14);
                //you have access token in access var   
            );
</script>
</head>
<body>  
</body>
</html>

【讨论】:

您缺少逗号,就在 dataType 之前:...。我无法编辑,因为 SO 至少需要更改 6 个字符。【参考方案13】:

100% 使用此代码

<a id="button" class="instagram-token-button" href="https://api.instagram.com/oauth/authorize/?client_id=CLIENT_ID&redirect_uri=REDIRECT_URL&response_type=code">Click here to get your Instagram Access Token and User ID</a>
<?PHP
  if (isset($_GET['code'])) 

        $code = $_GET['code'];

        $client_id='< YOUR CLIENT ID >';
        $redirect_uri='< YOUR REDIRECT URL >';
        $client_secret='< YOUR CLIENT SECRET >';
        $url='https://api.instagram.com/oauth/access_token';

        $request_fields = array(
            'client_id' => $client_id,
            'client_secret' => $client_secret,
            'grant_type' => 'authorization_code',
            'redirect_uri' => $redirect_uri,
            'code' => $code
        );

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        $request_fields = http_build_query($request_fields);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $request_fields);
        $results = curl_exec($ch); 
        $results = json_decode($results,true);
        $access_token = $results['access_token'];

        echo $access_token;

        exit();
    

?>

【讨论】:

欢迎来到 Stack Overflow!虽然这段代码可以回答这个问题,但最好包含一些上下文,解释它是如何工作的以及何时使用它。从长远来看,纯代码的答案往往不太有用。有关更多信息,请参阅How do I write a good answer?。 请看这个:***.com/questions/59052304/…

以上是关于如何获得 Instagram 访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

无需登录即可获取 Instagram 访问令牌

如何使用 jQuery 或 php 从 Instagram 令牌获取访问令牌

如何在 NodeJS 中获取 Instagram 用户名和访问令牌

如何在不登录的情况下从 Instagram 获取 oauth 2 访问令牌(隐式流程)?

Instagram gem:如何获得下一页结果?

如何将我的 Instagram 访问令牌从我的 Express 服务器发送到 React 客户端?