我已在我的网络服务器应用程序中实现了Google OAuth2登录流程(使用python / flask)。我的应用将用户重定向到Google,在那里他们使用Google凭据登录并转到我的应用。
我无法决定如何为此应用实施Logout功能。我可以清除应用的会话Cookie,但这不会将用户从Google A / c中删除。因此,如果用户在退出后点击登录,则重定向会转到Google,因为用户仍然登录Google,他们会自动(甚至不会提示重新输入凭据)重新登录我的应用。
This SO answer here似乎很好地概述了为什么不良做法迫使用户退出所有Google服务。如果这是唯一的出路,我会这样做,但我假设那里有一个更优雅的解决方案?
FWIW,“撤销”Google访问令牌也不起作用。我的应用使用OAuth2的profile
和email
范围(see this doc)。这些不需要用户明确的“权限授予”,因此没有撤销对这些范围的访问权限,这会强制用户在登录时重新提示。
如果有帮助,我使用mostly this doc来实现OAuth2流功能。我可以发布我的代码,但是(1)这一切都在那篇文章中,并且(2)除非你不熟悉flask / oauth2,否则回答这个问题应该是无关紧要的。
任何想法都会很棒,谢谢。
答案 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'
)