HTTPError 403 (Verboten) mit Django und Python-Social-Auth, die mit OAuth2 eine Verbindung zu Google herstellen

75

Bei Verwendung python-social-autherhalte ich eine 403: ForbidenFehlermeldung, nachdem ich den Zugriff von Google akzeptiert habe

EDIT: Ich hatte vor kurzem (2017) den gleichen Fehler, aber unter einer neuen Nachricht: 401 Client Error: Unauthorized for url: https://accounts.google.com/o/oauth2/token

damio
quelle

Antworten:

130

Diese Antwort ist veraltet, da die Google+ API am 07.03.19 veraltet ist

Sie müssen die Google+ APIzur Liste der aktivierten APIs in der Google Developer Console hinzufügen (unter APIs).

Hinweis: Wenn Sie die tatsächliche Fehlermeldung anzeigen möchten, verwenden Sie den Traceback, um den Inhalt der responseVariablen ( response.text) anzuzeigen . Ich benutze dafür werkzeug ( django-extensions+ python manage.py runserver_plus).

damio
quelle
3
Vielen Dank für die Antwort
StringsOnFire
1
Wow, riesige +1 für den werkzeug Zeiger. Eine ganz neue Welt des Debuggens wurde mir eröffnet ...
mgalgs
1
Du rettest mich einen Tag. Ich muss die Google+ API aktivieren, auch wenn ich nur oauth2 verwende.
Schema
Ich habe immer noch so ein Problem. Wenn ich 403 für eine Domain ([email protected]) bekomme und für eine andere ([email protected]) gewährt werde. Ich habe die Google+ API bereits aktiviert. Irgendeine Idee?
jpklzm
@jpklzm Gibt es eine Chance, dass derjenige, der diesen Fehler immer noch auslöst, ein Google Apps for Education-Konto ist? (Stellen Sie fest, dass seit Ihrem Kommentar eine Weile vergangen ist.) ZB eine Domain k12.xx.us oder .edu. Ich denke, das ist es, was ich sehe, aber ich habe nicht genug Daten, um es zu bestätigen. Theorie: Selbst wenn die Google+ API aktiviert ist, wird dieser Fehler angezeigt, wenn der Google Apps-Administrator Google+ für seine Domain-Nutzer deaktiviert hat. (Oder so ähnlich.)
Medmunds
14

Danke auch. Ich habe dieses Python-Social-Auth-Tutorial von Art und Logik verwendet , konnte aber einen 403: Forbidden HTTPError unter / complete / google-oauth2 / nicht überwinden, bis ich die Google+ API wie oben aktiviert habe und einige Minuten auf die Aktivierung von Google gewartet habe es .

Außerdem musste ich die Vorlagen in einem Vorlagenverzeichnis ablegen und TEMPLATE_DIRS = ('/path/to/psa_test/thirdauth/templates/',)in settings.py festlegen .

Hoffe das hilft jemandem auf dem Weg. Alles in allem dauert es ungefähr 6 Stunden, um es herauszufinden. Nicht schlecht, ich bin glücklich.

Chris McGinlay
quelle
3
Verdammt. Vielen Dank. So sehr. Ich habe bereits getan, was nötig war, aber es hat immer noch nicht funktioniert. Alles was ich tun musste war ~ 5 Minuten zu warten und Magie, es funktionierte.
Janos
1
Warten Sie im Zweifelsfall 5 Minuten! Ich muss die asynchrone Web-Verbreitung lieben.
Michael Butler
2

Für mich habe ich den vollständigen URI-Bereich verwendet, der von Google ab dem 1. September 2014 nicht mehr unterstützt wird. Dies wird hier in der Dokumentation zu Python-Social-Auth erwähnt

http://psa.matiasaguirre.net/docs/backends/google.html#google-oauth2

Google lehnt die Voll-URL-Bereiche ab dem 1. September 2014 zugunsten der Google+ API und der kürzlich eingeführten kürzeren Bereichsnamen ab. Aber Python-Social-Auth hat bereits die Bereichsänderung bei e3525187 eingeführt, die unter v0.1.24 veröffentlicht wurde.

Wenn Sie jedoch die Google+ API aus irgendeinem Grund nicht aktivieren und weiterhin mit dem vollständigen alten Bereich arbeiten möchten, müssen Sie die unter demselben Link genannten Schritte ausführen:

# Google OAuth2 (google-oauth2)
SOCIAL_AUTH_GOOGLE_OAUTH2_IGNORE_DEFAULT_SCOPE = True
SOCIAL_AUTH_GOOGLE_OAUTH2_SCOPE = [
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/userinfo.profile'
]

# Google+ SignIn (google-plus)
SOCIAL_AUTH_GOOGLE_PLUS_IGNORE_DEFAULT_SCOPE = True
SOCIAL_AUTH_GOOGLE_PLUS_SCOPE = [
'https://www.googleapis.com/auth/plus.login',
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/userinfo.profile'
]

SOCIAL_AUTH_GOOGLE_OAUTH2_USE_DEPRECATED_API = True
SOCIAL_AUTH_GOOGLE_PLUS_USE_DEPRECATED_API = True

Dies funktionierte für mich, da ich die Google+ API zu diesem Zeitpunkt nicht aktivieren wollte.

hshafy
quelle