如何将用户从使用Google OAuth2登录的应用程序中注销?

时间:2017-11-07 05:26:41

标签: python flask google-oauth2 google-authentication google-api-python-client

我已在我的网络服务器应用程序中实现了Google OAuth2登录流程(使用python / flask)。我的应用将用户重定向到Google,在那里他们使用Google凭据登录并转到我的应用。

我无法决定如何为此应用实施Logout功能。我可以清除应用的会话Cookie,但这不会将用户从Google A / c中删除。因此,如果用户在退出后点击登录,则重定向会转到Google,因为用户仍然登录Google,他们会自动(甚至不会提示重新输入凭据)重新登录我的应用。

This SO answer here似乎很好地概述了为什么不良做法迫使用户退出所有Google服务。如果这是唯一的出路,我会这样做,但我假设那里有一个更优雅的解决方案?

FWIW,“撤销”Google访问令牌也不起作用。我的应用使用OAuth2的profileemail范围(see this doc)。这些不需要用户明确的“权限授予”,因此没有撤销对这些范围的访问权限,这会强制用户在登录时重新提示。

如果有帮助,我使用mostly this doc来实现OAuth2流功能。我可以发布我的代码,但是(1)这一切都在那篇文章中,并且(2)除非你不熟悉flask / oauth2,否则回答这个问题应该是无关紧要的。

任何想法都会很棒,谢谢。

2 个答案:

答案 0 :(得分:1)

您可以参考以下链接来撤销()分配给您的应用的令牌。这将从您的应用中退出用户,但他将保持登录谷歌。它在你在上面的帖子中提到的相同链接上提及。

https://developers.google.com/identity/protocols/OAuth2WebServer#tokenrevoke

答案 1 :(得分:0)

技巧是添加prompt='consent'。根据您使用的API,可以在不同的位置添加它。这是一个基于书架应用程序的示例:

from oauth2client.contrib.flask_util import UserOAuth2
oauth2 = UserOAuth2()
oauth2.init_app(
    app,
    scopes=['email', 'profile'],
    authorize_callback=_request_user_info,
    client_id=app.config['GOOGLE_OAUTH2_CLIENT_ID'],
    client_secret=app.config['GOOGLE_OAUTH2_CLIENT_SECRET'],
    prompt='consent'
)