如何获得一个Instagram访问令牌
我真的很挣扎,我是如何为Instagram获取访问令牌的,
我注册了一个新的客户端,然后我使用这个URL
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code
填写客户端ID和redirectUrl。
然后,我被redirect到一个页面,它在Url中显示了一个代码,但从那里我没有一个线索的地方,然后得到我的访问令牌。
链接到官方的API文档是http://instagram.com/developer/authentication/
长话短 – 两步:
获取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
真的很迟钝,但我最近又要做这个,所以创build了一个教程(准备好,当我必须再次做)
请参阅: http : //bobmckay.com/web/simple-tutorial-for-getting-an-instagram-clientid-and-access-token
几乎所有人迄今发布的回复都只涉及如何处理前端的访问令牌,这是继Instagram的客户端“隐式validation”程序之后。 根据Instagram的API文档,此方法不太安全,也不推荐使用。
假设你正在使用一个服务器,Instagram的文档就交换一个令牌的代码提供了一个明确的答案,因为它们只给出了一个cURL请求的例子。 实质上,您必须使用提供的代码和您的应用程序的所有信息向其服务器发出POST请求,然后它们将返回包含用户信息和令牌的用户对象。
我不知道你在写什么语言,但是我在Node.js中用请求npm模块解决了这个问题,你可以在这里find它。
我通过URLparsing,并使用这些信息发送发布请求
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)) } } );
当然用你自己的信息replaceconfigAuth的东西。 你可能没有使用Node.js,但希望这个解决scheme能帮助你将你自己的解决scheme翻译成你使用的任何语言。
我以前遇到同样的问题,但我更改了这个url
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token
Instagram API不仅适用于您,还适用于所有Instagram用户使用您的应用程序进行身份validation。 我遵循了Instagram Dev网站上的说明 。 使用第一个(显式)方法,我可以很容易地在服务器上做到这一点。
步骤1)添加一个链接或button到您的网页,用户可以点击启动身份validation过程:
<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_ID
和YOUR_REDIRECT_URI
将与您在下面使用的YOUR_CLIENT_SECRET
一起YOUR_CLIENT_SECRET
给您。
步骤2)在您为您的应用程序定义的URI(与YOUR_REDIRECT_URI
相同)中,您需要接受来自Instagram服务器的响应。 Instagram服务器会在请求中反馈一个code
variables。 然后,您需要使用此code
和其他关于您的应用程序的信息直接从您的服务器发出另一个请求来获取access_token
。 我使用Django框架在python中完成了这个工作,如下所示:
直接将djangojoin到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或其他服务器端语言中,这个过程应该几乎相同。
访问令牌在您授权应用程序使用您的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
这对我来说工作得很好:
http://jelled.com/instagram/access-token
仅供参考,我将其与您将在这里find的jQuery Instagram插件结合使用; http://potomak.github.com/jquery-instagram
如果你正在寻找说明,看看这篇文章的post 。 如果你使用C#ASP.NET,看看这个回购 。
通过使用https://www.hurl.it/我能够看到:;{“code”:400,“error_type”:“OAuthException”,“error_message”:“匹配的代码没有find或已被使用。 }
所以:你必须得到每个请求的新代码。
在安全validation下禁用隐式的oauth,然后加载这个:
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token
在您的帐户中指定REDIRECT-URI,并按指定的方式完全键入。
如果你不想构build你的服务器端,就像在客户端(Web应用程序或移动应用程序)上开发一样,你可以select一个隐式authentication 。
作为文件说,首先做一个https请求
填写您指定的CLIENT-ID和REDIRECT-URL 。
然后就是login页面,但最重要的是如何在用户正确login后获取访问令牌。
用户使用正确的帐户和密码单击loginbutton后,网页将redirect到您指定的URL,然后是新的访问令牌。
HTTP://您的redirect的URI#=的access_token ACCESS-TOKEN
我不熟悉JavaScript,但在Android Studio中,这是一个简单的方法来添加一个侦听器 , 该侦听器监听 网页覆盖url的事件到新的url (redirect事件),然后它将通过redirecturlstring你,所以你可以很容易地拆分它获得访问令牌,如:
String access_token = url.split(“=”)[1];
意味着在每个“=”字符中将url分解成string数组,那么访问标记显然存在于[1]。
去pipe理clinet页面:
http://www.instagram.com/developer/
设置一个redirecturl
然后 :
使用此代码获取访问令牌:
<!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>