75

我真的在为如何获得 Instagram 的访问令牌而苦苦挣扎,

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

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

填写客户 ID 并重定向 URL。

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

4

13 回答 13

47

官方 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
于 2015-02-17T10:28:38.813 回答
12

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

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

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

我解析了 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,但希望此解决方案能帮助您将自己的解决方案翻译成您使用的任何语言。

于 2015-06-03T00:02:35.260 回答
10

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

于 2015-03-11T07:36:47.693 回答
6

Instagram API 不仅适用于您,还适用于任何可能使用您的应用进行身份验证的 Instagram 用户。我按照Instagram 开发网站上的说明进行操作。使用第一种(显式)方法,我可以很容易地在服务器上做到这一点。

步骤 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_ID并将YOUR_REDIRECT_URI在您成功在 Instagram 后端注册您的应用程序后提供给您,并在YOUR_CLIENT_SECRET下面使用。

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

将 django 指向以下response函数urls.py

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 或任何其他服务器端语言中应该几乎相同。

于 2016-06-28T15:01:09.850 回答
6

2019 年行之有效的简单方法

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

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

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

于 2017-04-05T15:07:04.280 回答
2

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

于 2013-05-12T15:16:58.697 回答
1

尝试这个:

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
于 2013-05-31T13:47:46.263 回答
1

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();
    }

?>
于 2019-01-07T08:52:01.887 回答
0

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

于 2013-08-08T02:41:46.367 回答
0

这对我来说很好:

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

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

于 2013-11-19T12:20:52.957 回答
0

通过使用https://www.hurl.it/我能够看到:{“code”:400,“error_type”:“OAuthException”,“error_message”:“未找到或已使用匹配代码。” }

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

于 2016-07-09T08:26:42.530 回答
0

如果您不想构建服务器端,例如仅在客户端(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 字符串传递给you ,因此您可以轻松地将其拆分以获取访问令牌,例如:

字符串 access_token = url.split("=")[1];

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

于 2017-05-23T23:49:18.283 回答
-1

转到管理 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>
于 2017-06-10T11:58:56.257 回答