So erhalten Sie ein Instagram Access Token

76

Ich habe wirklich Probleme damit, wie ich mein Zugriffstoken für Instagram erhalten soll.

Ich habe einen neuen Client registriert und dann diese URL verwendet

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

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 habe ich keine Ahnung, wo id dann mein Zugriffstoken erhält.

Gerry Mckay
quelle
1
Wirklich späte Antwort, aber ich musste dies kürzlich erneut tun, also habe ich ein Tutorial erstellt (bereit, wenn ich es erneut tun muss), siehe: bobmckay.com/web/…
Mr Fett
Holen Sie sich eine mit Ihrem Konto instagram.pixelunion.net ... super einfach.
Rebellen

Antworten:

48

Der Link zur offiziellen API-Dokumentation lautet http://instagram.com/developer/authentication/.

Longstory short - zwei Schritte:

Holen Sie sich den Code

Ö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
Marek Jalovec
quelle
1
Dies ist das einzige, was für mich funktioniert hat. Die anderen Antworten oben funktionieren nicht mehr. Ich folgte diesem Tutorial hier dmolsen.com/2013/04/05/generating-access-tokens-for-instagram
Phil
3
Ist es möglich, Code https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=codedirekt abzurufen? Oder brauche ich wirklich einen anderen Endpunkt, um die Code-Rückgabe zu erhalten? Es ist kompliziert und nervig
tom10271
3
Wenn Sie response_type auf Token setzen, funktioniert dies. Mit Code hat es bei mir nicht funktioniert.
Rorok_89
@aokaddaoc Du brauchst keinen anderen Endpunkt, Instagram leitet zu diesem URI weiter und übergibt das Token an die URL, wie inhttp://your-redirect-uri#access_token=ACCESS-TOKEN
Bruno Peres
4
Jetzt hat Instagram seine API geändert. Wir können keinen Code abrufen
Shakti
12

Fast alle Antworten, die bisher veröffentlicht wurden, beziehen sich nur auf den Umgang mit Zugriffstoken im Front-End nach dem clientseitigen "impliziten Authentifizierungs" -Verfahren von Instagram. Diese Methode ist weniger sicher und wird gemäß den API-Dokumenten von Instagram nicht empfohlen.

Angenommen, Sie verwenden einen Server, liefern die Instagram-Dokumente keine eindeutige Antwort zum Austausch eines Codes gegen ein Token, da sie nur ein Beispiel für eine cURL-Anforderung enthalten. Im Wesentlichen müssen Sie eine POST-Anfrage an ihren Server mit dem bereitgestellten Code und allen Informationen Ihrer App 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 Anforderungs-npm-Modul gelöst, das Sie hier finden .

Ich habe die URL analysiert und diese Informationen verwendet, um die Post-Anfrage zu senden

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 natürlich das configAuth-Zeug durch Ihre eigenen Informationen. Sie verwenden Node.js wahrscheinlich nicht, aber hoffentlich hilft Ihnen diese Lösung dabei, Ihre eigene Lösung in die Sprache zu übersetzen, in der Sie sie verwenden.

Suche
quelle
10

Ich habe das gleiche Problem schon einmal, aber ich ändere die URL in diese
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token

Andre
quelle
3
Ja! - das funktioniert - so wie instagram jetzt funktioniert, sollte es die beste Antwort für weniger sichere serverbasierte Anfragen sein. Beispiel: Ich muss nur die letzten Bilder für einen Benutzer abrufen. - Deaktivieren Sie Deaktivieren implizieren OAuth auf der Registerkarte Sicherheit Ihrer Instagram-Entwicklerseite. - Verwenden Sie die oben angegebene URL mit ersetzten Werten. - Holen Sie sich das access_token aus dem Umleitungs-URI. Jetzt können Sie einfache Dinge wie api.instagram.com/v1/users/[CLIENT ID] / media / Recent /? Access_token = [TOKEN] tun Es muss sowieso nicht so sicher sein - Instagram hat über komplizierte Anfragen wie diese.
Tycon
6

Die Instagram-API ist nicht nur für Sie gedacht, sondern für jeden Instagram-Benutzer, der sich möglicherweise bei Ihrer App authentifiziert. Ich habe die Anweisungen auf der Instagram Dev-Website befolgt . Mit der ersten (expliziten) Methode konnte ich dies ganz einfach auf dem Server tun.

Schritt 1) Fügen Sie Ihrer Webseite einen Link oder eine Schaltfläche hinzu, auf die ein Benutzer klicken kann, 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>

YOUR_CLIENT_IDund YOUR_REDIRECT_URIwird Ihnen gegeben, nachdem Sie Ihre App erfolgreich im Instagram-Backend registriert haben YOUR_CLIENT_SECRET.

Schritt 2) An der URI, die Sie für Ihre App definiert haben YOUR_REDIRECT_URI, müssen Sie die Antwort vom Instagram-Server akzeptieren. Der Instagram-Server gibt Ihnen eine codeVariable in der Anfrage zurück. Dann müssen Sie diese codeund andere Informationen zu Ihrer App verwenden, um eine weitere Anfrage direkt von Ihrem Server zu stellen, um die zu erhalten access_token. Ich habe dies in Python mit dem Django-Framework wie folgt gemacht:

direkter Django zur responseFunktion 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 responseFunktion, die die Anfrage 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.

jeffery_the_wind
quelle
6

Der einfache Weg, der 2019 funktioniert

Deaktivieren Sie implizite Oauth unter der Sicherheitsauthentifizierung und laden Sie dann Folgendes:

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

Geben Sie REDIRECT-URI in Ihrem Konto an und geben Sie es genau wie angegeben ein.

Callombert
quelle
2

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: Geben Sie hier die Bildbeschreibung ein

Adam
quelle
5
Ich bin immer noch total verloren, ich ziehe im Grunde nur meinen Instagram-Feed in meine Website, damit ich nicht weiß, wie ich das bekomme, was du oben angezeigt hast
Gerry Mckay
Beim Versuch, ein Zugriffstoken abzurufen, gibt es zwei Abläufe. Für Anfänger scheint es am einfachsten zu sein, die "clientseitige (implizite) Authentifizierung" zu verwenden. Ohne zu wissen, was Sie versucht haben oder wo genau Sie stecken, ist es schwierig, Sie in die richtige Richtung zu weisen. Ich habe vor ein paar Wochen einen kurzen Blog geschrieben, der helfen könnte. symmetricinfinity.com/2013/04/06/…
Adam
1
Wirklich späte Antwort, aber ich musste dies kürzlich erneut tun, also habe ich ein Tutorial erstellt (bereit, wenn ich es erneut tun muss), siehe: bobmckay.com/web/…
Mr Fett
Verwenden Sie in diesem Fall Javascript. access_token = location.hash.replace ('# access_token =', '');
user1021860
1

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
Boyfromnorth
quelle
1
Was genau ist die redirect_URL? Ich kann es nicht in meinem Verwaltungskonto im Instagram-Entwicklerfenster finden
Mona Jalal
1
Redirect_URL ist die URL, auf die die Instagram-Antwort zurückkommt. Es ist also nicht im Entwicklerfenster. Es ist dasjenige, das Sie erstellen, um die Antwort in Ihrer App / Website zurückzugewinnen.
Boyfromnorth
1

100% arbeiten mit diesem 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();
    }

?>
Mehul Velani
quelle
1
Willkommen bei Stack Overflow! Während dieser Code die Frage beantworten kann, ist es besser, einen Kontext einzuschließen, in dem erklärt wird, wie er funktioniert und wann er verwendet werden soll. Nur-Code-Antworten sind auf lange Sicht weniger nützlich. Siehe Wie schreibe ich eine gute Antwort? Für weitere Informationen.
Mark Ormesher
Bitte schauen Sie in diese: stackoverflow.com/questions/59052304/…
user2028
0

Das hat bei mir 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. http://potomak.github.com/jquery-instagram

Rinocerontes
quelle
3
Würden Sie bitte Ihre Antwort bearbeiten, um eine ausführlichere Erklärung zu erhalten? Nur-Link-Antworten ziehen in der Regel enge Stimmen an.
Gayot Fow
Leider hat Instagram ihn dazu gebracht, seine Website herunterzufahren. Früher hat es aber super funktioniert.
Dex
0

Wenn Sie Anweisungen suchen, lesen Sie in diesem Artikel aus Post . Wenn Sie C # ASP.NET verwenden, schauen Sie sich dieses Repo an .

Mike
quelle
1
und es ist weg ... degs.io ist weg.
JP Hellemons
0

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: Sie müssen für jede Anfrage einen neuen Code erhalten.

Ton Škoda
quelle
0

Wenn Sie Ihre Serverseite nicht erstellen möchten, z. B. nur auf einer Clientseite (Web-App oder mobile App), können Sie eine implizite Authentifizierung auswählen .

Stellen Sie, wie im Dokument angegeben, zuerst eine https-Anfrage mit

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

Geben Sie Ihre CLIENT-ID und die von Ihnen angegebene REDIRECT-URL ein .

Dann geht es zur Anmeldeseite, aber das Wichtigste ist, wie Sie das Zugriffstoken erhalten, nachdem sich der Benutzer korrekt angemeldet hat.

Nachdem der Benutzer auf die Anmeldeschaltfläche mit dem richtigen Konto und Kennwort geklickt hat, wird die Webseite zu der von Ihnen angegebenen URL umgeleitet, gefolgt von einem neuen Zugriffstoken.

http: // your-redirect-uri # access_token = ACCESS-TOKEN

Ich bin nicht mit Javascript vertraut, aber in Android Studio ist dies eine einfache Möglichkeit, einen Listener hinzuzufügen , der das Ereignis abhört, bei dem die Webseite die URL zur neuen URL überschreibt (Umleitungsereignis), und dann die Umleitungs-URL-Zeichenfolge an weiterleitet Sie, so können Sie es einfach teilen, um das Zugriffstoken wie folgt zu erhalten:

String access_token = url.split ("=") [1];

Bedeutet, die URL in das Zeichenfolgenarray in jedem "=" - Zeichen aufzuteilen, dann ist das Zugriffstoken offensichtlich bei [1] vorhanden.

OOD Wasserball
quelle
-1

Gehen Sie zur Verwaltung der Clinet-Seite in:

http://www.instagram.com/developer/

Legen Sie eine Weiterleitungs-URL fest

dann :

Verwenden Sie diesen Code, um Zugriffstoken zu erhalten:

<!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>
Omid reza
quelle
Sie haben ein fehlendes Komma kurz vor dem Datentyp: .... Ich kann nicht bearbeiten, da SO mindestens 6 Zeichen geändert werden muss.
Malteser Nacht