Ich habe wirklich Probleme damit, wie ich mein Zugriffstoken für Instagram bekommen soll.
Ich habe einen neuen Client registriert und dann diese URL verwendet
um die Client-ID einzugeben und die URL umzuleiten.
Ich wurde dann zu einer Seite weitergeleitet, auf der ein Code in der URL angezeigt wurde, aber von dort aus habe ich keine Ahnung, wo die ID dann mein Zugriffstoken erhält.
Link zur offiziellen API-Dokumentation ist http://instagram.com/developer/authentication/
Kurzgeschichte - zwei Schritte:
CODE abrufen
Öffnen Sie https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code mit Informationen von http://instagram.com/developer/clients/manage/
Zugriffstoken erhalten
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
In fast allen Antworten, die bisher veröffentlicht wurden, wird nur beschrieben, wie Zugriffstoken im Front-End gehandhabt werden, nachdem Instagram die "implizite Authentifizierung" von Instagram durchgeführt hat. Diese Methode ist gemäß den API-Dokumenten von Instagram weniger sicher und wird nicht empfohlen.
Unter der Annahme, dass Sie einen Server verwenden, können die Instagram-Dokumente keine eindeutige Antwort auf den Austausch eines Codes für ein Token geben, da sie nur ein Beispiel für eine cURL-Anforderung darstellen. Im Wesentlichen müssen Sie eine POST -Anforderung mit dem bereitgestellten Code und allen Informationen Ihrer App an ihren Server senden, und sie geben ein Benutzerobjekt zurück, das Benutzerinformationen und das Token enthält.
Ich weiß nicht, in welcher Sprache Sie schreiben, aber ich habe dies in Node.js mit dem Request-npm-Modul gelöst, das Sie hier finden können.
Ich habe die URL durchsucht und diese Informationen zum Senden der Post-Anfrage verwendet
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))
}
}
);
Ersetzen Sie das configAuth-Zeug natürlich durch Ihre eigenen Informationen. Sie verwenden wahrscheinlich Node.js nicht, aber hoffentlich hilft Ihnen diese Lösung, Ihre eigene Lösung in die Sprache zu übersetzen, in der Sie sie verwenden.
Ich habe schon das gleiche Problem, aber ich ändere die URL in dieses
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token
Die Instagram-API ist nicht nur für Sie gedacht, sondern auch für jeden Instagram-Benutzer, der möglicherweise mit Ihrer App authentifiziert wird. Ich folgte den Anweisungen auf der Instagram Dev-Website . Mit der ersten (expliziten) Methode konnte ich dies ganz leicht auf dem Server erledigen.
Schritt 1) Fügen Sie Ihrer Webseite einen Link oder eine Schaltfläche hinzu, auf die ein Benutzer klicken könnte, um den Authentifizierungsprozess zu starten:
<a href="https://api.instagram.com/oauth/authorize/?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&response_type=code">Get Started</a>
Nachdem Sie Ihre App erfolgreich im Instagram-Backend registriert haben, erhalten Sie YOUR_CLIENT_ID
und YOUR_REDIRECT_URI
zusammen mit YOUR_CLIENT_SECRET
unten angezeigt.
Schritt 2) Bei dem URI, den Sie für Ihre App definiert haben, der mit YOUR_REDIRECT_URI
identisch ist, müssen Sie die Antwort vom Instagram-Server akzeptieren. Der Instagram-Server gibt eine code
-Variable in der Anfrage zurück. Dann müssen Sie dieses code
und andere Informationen zu Ihrer App verwenden, um eine weitere Anforderung direkt von Ihrem Server anzufordern, um den access_token
zu erhalten. Ich habe dies in Python mit Django-Framework wie folgt gemacht:
leiten Sie Django an die response
-Funktion in 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'),
]
Hier ist die response
-Funktion, die die Anforderung bearbeitet, 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')
Dies ist nur eine Möglichkeit, aber der Prozess sollte in PHP oder einer anderen serverseitigen Sprache nahezu identisch sein.
Deaktivieren Sie implizite Befehle unter der Sicherheitsauthentifizierung und DANN laden Sie Folgendes:
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token
Geben Sie in Ihrem Konto REDIRECT-URI an und geben Sie es genau wie angegeben ein.
Das Zugriffstoken wird als URI-Fragment zurückgegeben, nachdem Sie die Anwendung zur Verwendung Ihrer Instagram-Daten autorisiert haben. Es sollte ungefähr so aussehen:
Versuche dies:
http://dmolsen.com/2013/04/05/generating-access-tokens-for-instagram/
nachdem Sie den Code erhalten haben, können Sie Folgendes tun:
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
Das hat für mich gut funktioniert:
http://jelled.com/instagram/access-token
Zu Ihrer Information, ich habe es in Kombination mit dem jQuery Instagram Plugin verwendet, das Sie hier finden können: http://potomak.github.com/jquery-instagram
100% arbeiten diesen Code
<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();
}
?>
Wenn Sie Ihre Serverseite nicht aufbauen möchten, z. B. nur auf Client-Seite (Web-App oder mobile App), können Sie ein implizite Authentifizierung wählen.
Wie das Dokument besagt, machen Sie zuerst eine https-Anfrage mit
Geben Sie Ihre CLIENT-ID und REDIRECT-URL ein.
Dann geht es zur Anmeldeseite, aber das Wichtigste ist, wie man das Zugriffstoken erhält, nachdem sich der Benutzer korrekt angemeldet hat.
Nachdem der Benutzer auf die Anmeldeschaltfläche mit dem richtigen Konto und dem richtigen Kennwort geklickt hat, wird die Webseite auf die angegebene URL umgeleitet, gefolgt von einem neuen Zugriffstoken.
Ich bin nicht mit Javascript vertraut, aber in Android Studio ist Eine einfache Möglichkeit, um einen Listener hinzufügendie das Ereignis hören. Die Webseite überschreibt die URL mit der neuen URL. (redirect event), dann wird die URL für die Weiterleitungs-URL an Sie übergeben, sodass Sie sie leicht aufteilen können, um das Zugriffstoken wie folgt zu erhalten:
String access_token = url.split ("=") [1];
Bedeutet das Unterteilen der URL in das String-Array in jedem "=" - Zeichen, dann ist das Zugriffstoken offensichtlich bei [1] vorhanden.
Mit https://www.hurl.it/ konnte ich Folgendes sehen: { "Code": 400, "Error_type": "OAuthException", "error_message": "Übereinstimmender Code wurde nicht gefunden oder wurde bereits verwendet." }
also: man muss für jede anfrage einen neuen code bekommen.