HTTPError 403 (Заборонено) з Django та python-social-auth підключення до Google за допомогою OAuth2


75

Використовуючи python-social-auth, я отримую 403: Forbidenповідомлення про помилку після прийняття доступу від google

РЕДАГУВАТИ: Нещодавно (2017) мала таку ж помилку, але під новим повідомленням: 401 Client Error: Unauthorized for url: https://accounts.google.com/o/oauth2/token

Відповіді:


130

Ця відповідь застаріла, оскільки API API Google+ припинено 07.03.19

Вам потрібно додати Google+ APIдо списку ввімкнених API на консолі розробника Google (нижче APIs)

Примітка. Якщо ви хочете побачити справжнє повідомлення про помилку, скористайтесь функцією відстеження, щоб переглянути вміст responseзмінної ( response.text). Для цього я використовую werkzeug ( django-extensions+ python manage.py runserver_plus).


3
Дякуємо, що повернулися з відповіддю
StringsOnFire

1
Ого, величезне +1 для вказівника werkzeug. Для мене відкрився цілий новий світ налагодження ...
mgalgs

1
Ти економиш мені день. Мені потрібно ввімкнути API Google+, навіть якщо я просто використовую oauth2.
schemacs

Я все ще маю таку проблему. Коли я отримую 403 за домен (john@doe.com) і надаю для іншого (doe@john.com). Я вже ввімкнув API Google+ на ньому. Будь-яка ідея?
jpklzm

@jpklzm є якийсь шанс, що все-таки виникла ця помилка, був обліковий запис Google Apps for Education? (Зрозумійте, що з моменту Вашого коментаря минуло трохи часу.) Наприклад, домен k12.xx.us або .edu. Я думаю, що це те, що я бачу, але не маю достатньо даних для підтвердження. Теорія: навіть якщо Google+ API увімкнено, якщо адміністратор Google Apps вимкнув Google+ для своїх користувачів домену, ви отримуєте цю помилку. (Або щось подібне.)
medmunds

14

Також спасибі. Я використовував цей підручник з python-social-auth за допомогою мистецтва та логіки , але не зміг пройти повз 403: Заборонений HTTPError на / complete / google-oauth2 /, поки не ввімкнув API Google+, як зазначено вище, і зачекавши кілька хвилин, поки Google увімкне це .

Крім того, мені довелося розмістити шаблони в каталозі шаблонів і встановити TEMPLATE_DIRS = ('/path/to/psa_test/thirdauth/templates/',)в settings.py.

Сподіваюся, це допоможе комусь на цьому шляху. Загалом, на це потрібно близько 6 годин. Непогано, я щасливий.


3
Блін. Дякую. Так багато. Я вже зробив те, що потрібно, але це все ще не спрацювало. Все, що мені потрібно було зачекати ~ 5 хвилин, і магія, це працювало.
janos

1
Якщо сумніваєтесь, почекайте 5 хвилин! Потрібно любити асинхронне веб-поширення.
Майкл Батлер

2

Для мене я використовував повну область URI, яку Google припинив з 1 вересня 2014 року, про це згадується в документації python-social-auth тут

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

З 1 вересня 2014 року Google припиняє застосування повномасштабних областей застосування на користь Google+ API та нещодавно введених коротших назв областей. Але python-social-auth вже представив зміну області застосування на e3525187, який був випущений в версії 0.14.

Однак, якщо ви з будь-якої причини не хочете вмикати API Google+ і хочете продовжувати працювати зі старою сферою повноцінного урі, вам потрібно виконати дії, зазначені в тому ж посиланні:

# 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

Це спрацювало для мене, оскільки на даний момент я не хотів увімкнути API Google+.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.