2017-04-26 6 views
1

Ich mache die folgende Anfrage:Abrufen von Zugriffstoken ohne manuelles Kopieren

https://oauth.vk.com/authorize?redirect_uri=https%3A%2F%2Foauth.vk.com%2Fblank.html&response_type=token&client_id=5842359&v=5.63&scope=friends%2Coffline&display=page

ein Zugriffstoken abzurufen. Diese URL führt zu einer Anmeldeseite auf vk.com (falls nicht bereits angemeldet), fordert einen Benutzer auf, eine Anwendung zu autorisieren, und leitet dann an https://oauth.vk.com/blank.html#access_token= {token} & expires_in = 0 & user_id = {id}. Um ein Zugriffstoken tatsächlich abzurufen, muss es manuell von der Adressleiste kopiert werden. Dieses Verfahren ist in der offiziellen API angegeben. Gibt es einen Weg, dies zu umgehen? Wie bekomme ich ein Token, das nur Python-Code verwendet?

Im Folgenden ist das Verfahren, das die URL erzeugt:

import requests 

def authorize_app(client_id, redirect_uri = None): 
''' 
    The function generates an url, which redirects to login page (optional, if not logged in) and app authorization. 
''' 
if redirect_uri == None: 
    redirect_uri = 'https://oauth.vk.com/blank.html' # default callback url 
oauth = requests.get('https://oauth.vk.com/authorize', params = {'client_id' : str(client_id), 
                   'redirect_uri' : redirect_uri, 
                   'display' : 'page', 
                   'scope' : ['friends,offline'], # offline option makes the token permanent 
                   'response_type' : 'token', 
                   'v' : 5.63}) 
return oauth.url 
+0

Link zur API-Dokumentation und oauth: https://vk.com/dev/access_token – jackdawrites

+0

Kannst du nicht die redirect_uri ändern? Die übliche Vorgehensweise wäre, einen lokalen Webserver zu öffnen (etwa "localhost: 5000") und den Benutzer dort umzuleiten, und den Server dann zu stoppen, sobald er das Token erhalten hat. –

+0

@Rawing danke, ich werde das versuchen. – jackdawrites

Antwort

0

Sie Autorisierungscode Fluss verwenden können, wobei Sie AUTH_CODE erhalten und dann diesen Code access_token abzurufen verwenden.

Das Abrufen von auth_code und access_tokens sind nur POST-Anforderungen an den OAuth-Server.

In Ihrem Code response_type sollte Code sein, den Auth-Code zu bekommen und dann diesen Code acccess_token diese https://vk.com/dev/auth_sites Siehe

abzurufen zu verwenden. Im Allgemeinen ist dieser Ablauf bei jedem OAuth-Anbieter gleich.

+0

Aber der Code, um das access_token zu erhalten, wird auch in der URL geliefert, die nur über die Adressleiste meines Browsers zugänglich ist, da ich https://oauth.vk.com als redirect_uri benutze. Meine Frage ist, ob ich diesen Code von der URL nehmen kann? – jackdawrites

+0

Ja, es gibt einige Möglichkeiten, dies zu erreichen. Eine Möglichkeit besteht darin, einen httpserver mit Python zu erstellen, der an einem Port nach ex: localhost: 8080 lauscht. Sobald Sie mit der Authentifizierung fertig sind, geben Sie redirect_uri an localhost: 8080. Sobald Sie dorthin umgeleitet haben, können Sie den Code aus der Abfragezeichenfolge params abrufen. Wenn Sie access_token direkt mit response_type = access_token abrufen, können Sie das gleiche Snippet oben verwenden, um eine Anfrage an den Server zu senden und das access_token innerhalb des Python-Codes zu erhalten. –

Verwandte Themen