web-dev-qa-db-fra.com

HTTPError 403 (Forbidden) avec Django et python-social-auth se connectant à Google avec OAuth2

En utilisant python-social-auth, J'ai un 403: Forbiden message d'erreur après avoir accepté l'accès de google

EDIT: J'ai récemment (2017) eu la même erreur mais sous un nouveau message: 401 Client Error: Unauthorized for url: https://accounts.google.com/o/oauth2/token

76
damio

Cette réponse est obsolète car l'API Google+ est obsolète le 3/7/19

Vous devez ajouter le Google+ API à la liste des API activées sur la console développeur de Google (sous APIs)

Remarque: Si vous voulez voir le vrai message d'erreur, utilisez le traceback pour regarder le contenu de la variable response (response.text). J'utilise werkzeug pour cela (Django-extensions + python manage.py runserver_plus).

131
damio

Merci aussi. J'utilisais ceci tutoriel python-social-auth par art et logique , mais je n'ai pas pu dépasser 403: HTTPError interdit dans/complete/google-oauth2/jusqu'à ce que l'activation de l'API Google+ comme ci-dessus et en attendant quelques minutes que Google l’active .

De plus, j'ai dû placer les modèles dans un répertoire de modèles et définir TEMPLATE_DIRS = ('/path/to/psa_test/thirdauth/templates/',) dans settings.py.

J'espère que cela aide quelqu'un en cours de route. Dans l'ensemble, il a fallu environ 6 heures pour le comprendre. Pas trop mal, je suis content.

15
Chris McGinlay

Pour moi, j'utilisais la portée de l'URI complet qui est déconseillée par Google depuis le 1er septembre 2014, cela est mentionné dans la documentation python-social-auth ici

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

Google déconseille les étendues d'URL complète à partir du 1er septembre 2014 au profit de l'API Google+ et des noms d'étendues plus courts récemment introduits. Mais python-social-auth a déjà introduit le changement de portée à e3525187 qui a été publié à la v0.1.24.

Cependant, si vous ne souhaitez pas activer l'API Google+ pour une raison quelconque et que vous souhaitez continuer à travailler avec l'ancienne étendue complète, vous devez suivre les étapes mentionnées dans le même lien:

# 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

Cela a fonctionné pour moi car je ne voulais pas activer l'API Google+ à ce stade.

2
hshafy