如何获得Instagram访问令牌


76

我真的在如何获取Instagram访问令牌的过程中挣扎,

我注册了一个新客户,然后使用了该URL

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

填写客户ID并重定向网址。

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


1
回复确实很晚,但我最近不得不再次这样做,因此创建了一个教程(准备何时需要再次做),请参见:bobmckay.com/web/…–
Fett先生


使用您的帐户instagram.pixelunion.net获得一个...超级简单。
起义

Answers:


48

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

Longstory短-两步:

取得验证码

使用来自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

1
这是唯一对我有用的东西。上面的其他答案不再起作用。我在这里按照本教程操作dmolsen.com/2013/04/05/generating-access-tokens-for-instagram
Phil

3
是否可以https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code直接从中获取代码?还是我真的需要另一个端点来捕获代码返回?它既复杂又烦人
tom10271 '16

3
如果将response_type设置为令牌,则可以使用。对于我来说,它不适用于代码。
Rorok_89 '16

@aokaddaoc您不需要其他端点,Instagram将重定向到在URL上传递令牌的URI,如http://your-redirect-uri#access_token=ACCESS-TOKEN
Bruno Peres

4
现在instagram更改了它的api,我们无法获取代码
Shakti,

12

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

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

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

我解析了网址,并使用此信息发送了发帖请求

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,但是希望该解决方案可以帮助您将自己的解决方案转换为使用它的任何语言。


10

3
是的 -可行-就instagram现在的运行方式而言,它应该是基于服务器的不安全请求的最佳答案。示例:我只需要为用户获取最后几张图像。-在instagram开发者页面的安全性选项卡中取消选中禁用隐式OAuth。-使用上面的URL替换值-从重定向URI获取access_token现在,您可以执行api.instagram.com/v1/users/ [客户ID] / media / recent /?access_token = [TOKEN]这样的简单操作无论如何都不需要那么安全-instagram已经解决了像这样的复杂请求。
泰康

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


6

2019年工作的简单方法

在安全性auth下禁用隐式oauth,然后加载:

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

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


2

授权应用程序使用Instagram数据后,访问令牌将作为URI片段返回。它看起来应该如下所示: 在此处输入图片说明


5
我仍然完全迷失了,我基本上只是将我的Instagram提要添加到我的网站中,所以我不知道如何获得上面显示的内容
Gerry Mckay

尝试获取访问令牌时有两个流程。对于初学者来说,似乎最简单的方法是使用“客户端(隐式)身份验证”。不知道自己尝试过什么,或者确切地陷入困境,很难为您指明正确的方向。几周前我写了一个简短的博客可能会有所帮助。symmetricinfinity.com/2013/04/06/…–
亚当

1
回复确实很晚,但是我最近不得不再次这样做,因此创建了一个教程(准备何时需要再次执行),请参阅:bobmckay.com/web/…–
Fett先生

在这种情况下,请使用javascript。access_token = location.hash.replace('#access_token =','');
user1021860

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

1
redirect_URL到底是什么?我在instagram开发人员面板的管理帐户中找不到它
Mona Jalal

1
Redirect_URL是Instagram响应返回的URL。因此它不在开发人员面板中。这是您创建的用于将响应返回到您的应用程序/网站中的一种。
boyfromnorth

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

?>

1
欢迎使用Stack Overflow!尽管此代码可以回答问题,但最好包含一些上下文,说明其工作方式和使用时间。从长远来看,纯代码答案往往没什么用。请参阅如何写一个好的答案?有关更多信息。
Mark Ormesher




0

通过使用https://www.hurl.it/,我能够看到以下信息:{“ code”:400,“ error_type”:“ OAuthException”,“ error_message”:“找不到匹配的代码或已经使用了匹配的代码。” }

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


0

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

如文件所述,首先使用

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 =访问令牌

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

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

意味着将URL分解为每个“ =”字符中的字符串数组,然后访问令牌显然存在于[1]。


-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>

在dataType之前,您缺少逗号:....我无法编辑,因为SO至少需要更改6个字符。
malteseKnight
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.