Django 和 python-social-auth 连接 Google OAuth2 时出现 HTTPError 403(禁止访问)

75 投票
3 回答
14059 浏览
提问于 2025-04-18 10:50

使用 python-social-auth 时,我在接受谷歌的访问权限后,收到了一个 403: Forbidden 的错误信息。

补充说明:我最近(2017年)遇到了同样的错误,不过显示的信息变成了 401 Client Error: Unauthorized for url: https://accounts.google.com/o/oauth2/token

3 个回答

2

对我来说,我之前使用的是完整网址的权限范围,但谷歌从2014年9月1日起就不再支持这个了,这在python-social-auth的文档中有提到。

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

谷歌从2014年9月1日起不再支持完整网址的权限范围,而是更倾向于使用Google+ API和最近推出的更短的权限名称。不过,python-social-auth在版本v0.1.24中已经进行了权限范围的更新。

不过,如果你出于某种原因不想启用Google+ API,并且想继续使用旧的完整网址权限范围,你需要按照同一链接中提到的步骤进行操作:

# 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

这对我来说有效,因为我在这个时候不想启用Google+ API。

14

谢谢你的帮助。我之前在用这个art and logic的python-social-auth教程,但是在访问/complete/google-oauth2/的时候遇到了403: Forbidden的错误,直到我按照上面的步骤启用了Google+ API并且等了几分钟让Google处理这个请求,问题才解决。

另外,我还需要把模板放到一个模板目录里,并在settings.py文件中设置 TEMPLATE_DIRS = ('/path/to/psa_test/thirdauth/templates/',)

希望这对其他人有帮助。总的来说,我花了大约6个小时才搞定这个问题。还不错,我很满意。

130

这个回答已经过时,因为Google+ API将在2019年3月7日停止使用

你需要在Google开发者控制台的已启用API列表中添加Google+ API(在APIs下)

注意:如果你想看到真正的错误信息,可以使用回溯功能查看response变量的内容(response.text)。我用的是werkzeug这个工具(django-extensions + python manage.py runserver_plus)。

撰写回答