我真的在如何获取Instagram访问令牌的过程中挣扎,
我注册了一个新客户,然后使用了该URL
填写客户ID并重定向网址。
然后,我被重定向到一个页面,该页面在Url中显示了一个代码,但是从那里我不知道id会在哪里获取我的访问令牌。
我真的在如何获取Instagram访问令牌的过程中挣扎,
我注册了一个新客户,然后使用了该URL
填写客户ID并重定向网址。
然后,我被重定向到一个页面,该页面在Url中显示了一个代码,但是从那里我不知道id会在哪里获取我的访问令牌。
Answers:
到官方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
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code
直接从中获取代码?还是我真的需要另一个端点来捕获代码返回?它既复杂又烦人
http://your-redirect-uri#access_token=ACCESS-TOKEN
到目前为止,人们发布的几乎所有回复都只涉及如何按照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,但是希望该解决方案可以帮助您将自己的解决方案转换为使用它的任何语言。
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或任何其他服务器端语言中应该几乎相同。
授权应用程序使用Instagram数据后,访问令牌将作为URI片段返回。它看起来应该如下所示:
试试这个:
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
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();
}
?>
这对我来说很好:
http://jelled.com/instagram/access-token
仅供参考,我将其与jQuery Instagram插件结合使用,您将在此处找到它; http://potomak.github.com/jquery-instagram
通过使用https://www.hurl.it/,我能够看到以下信息:{“ code”:400,“ error_type”:“ OAuthException”,“ error_message”:“找不到匹配的代码或已经使用了匹配的代码。” }
所以:您必须为每个请求获取新代码。
如果您不想构建服务器端(例如仅在客户端(Web应用程序或移动应用程序)上进行开发),则可以选择Implicit Authentication。
如文件所述,首先使用
填写您指定的CLIENT-ID和REDIRECT-URL。
然后进入登录页面,但是最重要的是在用户正确登录后如何获取访问令牌。
用户单击具有正确帐户名和密码的登录按钮后,网页将重定向到您指定的URL,后跟一个新的访问令牌。
我不熟悉javascript,但是在Android studio中,这是添加侦听器 的简单方法,该侦听器侦听网页将URL覆盖到新url的事件(重定向事件),然后它将重定向url字符串传递给您,因此您可以轻松地将其拆分以获取访问令牌,例如:
字符串access_token = url.split(“ =”)[1];
意味着将URL分解为每个“ =”字符中的字符串数组,然后访问令牌显然存在于[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=REDIRECT-URI&response_type=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>