2016-03-04 8 views
7

Ich habe REST API Zugriff auf einen bestimmten Dienst als Teil einer Beta erworben. Mir wurde gesagt, dass die Autorisierung durch OAuth2 erfolgt.Verwenden von OAuth2 mit Benutzername und Kennwort

bekam ich folgendes:

  1. ID
  2. SECRET
  3. SITE

Ich habe auch ein Code-Beispiel in Ruby:

client = OAuth2::Client.new(key, secret, :site => site) 
token = client.password.get_token('[email protected]', 'your_password') 
access_token = OAuth2::AccessToken.new(client, token) 
JSON.parse access_token.get("/v1/users/me").body rescue {} 

Ich versuche, das gleiche Snippet in Python mit demzu implementierenPaket, ohne Erfolg:

consumer = oauth2.Consumer(key=self._client_id, 
          secret=self._client_secret) 
request_token_url = "api.theservice.com/" 
token = oauth2.Token(key=self._email, secret=self._password) 
client = oauth2.Client(consumer, token) 
resp, content = client.request(request_token_url, "GET") 
pprint.pprint(resp) 
pprint.pprint(content) 
resp, content = client.request(request_token_url + 'v1/users/me', "GET") 
pprint.pprint(resp) 
pprint.pprint(content) 

Die zweite Antwort enthält folgende Komponenten:

'www-authenticate': 'Bearer realm="Doorkeeper", error="invalid_token", ' 
        'error_description="The access token is invalid"', 

Ich habe versucht, auch ohne Token eine oauth2.Client Objekt erstellt und überprüft die erste Antwort für eine access_token, aber nichts von Die Sorte kam durch.

Was ist der richtige Weg, um hier zu authentifizieren?

+0

Ist dieser Service eine dreibeinige OAuth wie Twitter beschrieben ist [hier] (https://github.com/joestump/python-oauth2/wiki/Zwitschern-Dreibein-OAuth)? – skyline75489

+0

Nicht zu meinem Wissen. –

Antwort

0

Soweit ich sehe, unterstützen weder oauth2 noch Anfragen-oauth2 Benutzernamen/Passwort-Strategie. Sie müssen also das Zugriffs-Token selbst erhalten.

Überprüfen Sie die API-Dokumentation für Details, aber im Allgemeinen sollte es so ähnlich sein:

r = requests.post('http://api.theservice.com/auth', 
        data = {'email':email, 'password': password}).json() 

token = oauth2.Token(key=r['key'], secret=r['secret']) 
consumer = oauth2.Consumer(key=self._client_id, 
          secret=self._client_secret) 

client = oauth2.Client(consumer, token) 
Verwandte Themen