如何获得 Instagram 访问令牌

我真的很纠结怎么才能拿到 Instagram 的访问权限,

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

Https://api.instagram.com/oauth/authorize/?client_id=client-id&redirect_uri=redirect-uri&response_type=code

填写客户端 ID 并重定向 Url。

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

248399 次浏览

在您授权应用程序使用您的 Instagram 数据之后,访问令牌将作为 URI 片段返回。它应该看起来像下面这样: enter image description here

试试这个:

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

如果您正在寻找说明,请查看本文 邮寄。如果你正在使用 C # ASP.NET,看看这个 回购

这对我来说很有效:

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

仅供参考,我将它与 jQuery Instagram 插件结合使用,你可以在这里找到它; Http://potomak.github.com/jquery-instagram

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

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

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

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

我解析了 URL 并使用这些信息发送发送请求

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

Instagram API 不仅适合你,而且适合任何 Instagram 用户使用你的应用进行潜在的身份验证。我跟踪了 Instagram Dev 网站上的说明。使用第一个(显式)方法,我可以很容易地在服务器上完成这项工作。

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

当你在 Instagram 后端成功注册你的应用程序后,将会给你 YOUR_CLIENT_IDYOUR_REDIRECT_URI,以及下面使用的 YOUR_CLIENT_SECRET

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

直接 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 或任何其他服务器端语言中,这个过程应该是几乎相同的。

通过使用 https://www.hurl.it/,我可以看到: { 密码400, “ error _ type”: “ OAuthException”, “ error _ message”: “没有找到匹配的代码或者已经使用了匹配的代码。” }

因此: 每个请求都必须得到新的代码。

2019年最简单的方法

禁用 security auth 下的隐式 Oauth,然后加载:

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

在您的帐户中指定 REDIRECT-URI,并按照指定的方式输入。

如果你不想建立你的服务器端,像只开发客户端(网络应用或移动应用) ,你可以选择一个 隐式认证

正如文档所说,首先使用

Https://api.instagram.com/oauth/authorize/?client_id=client-id&redirect_uri=redirect-uri&response_type=token

填写你指定的 委托人身份重定向-网址

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

用户单击同时具有正确帐户和密码的登录按钮后, 该网页将重定向到您指定的网址,然后是一个新的访问令牌。

Http://your-redirect-uri#access_token=access-token

我对 javascript 不是很熟悉,但是在 Android 工作室里, 这是一个简单的方法来 增加一个听众 它监听事件,网页覆盖新 URL 的 URL(重定向事件) , 然后它会将重定向 URL 字符串传递给您,这样您就可以轻松地将其分割以获得访问令牌,如:

字符串 access _ token = url.split (“ =”)[1] ;

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

去管理诊所页面:

Http://www.instagram.com/developer/

设置一个重定向 URL

然后:

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

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

完全按照这个程序来

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


?>