如何在用户登出时使Google Identity的OpenID会话失效?
首先得明确一个关键点:Google Identity目前并没有官方支持的、仅终止单个应用关联会话的OIDC标准登出方式,你尝试的Session Management、Front/BackChannel Logout这些规范接口,Google确实没有实现,这是他们服务设计上的限制。
不过你可以通过以下几种官方认可的方式来处理这个场景:
引导用户手动管理应用权限
在你的网站登出页面,可以提示用户前往Google账户的「安全」板块,找到「第三方应用访问」选项,撤销你的应用的访问权限。这样下次用户尝试用Google登录你的网站时,就需要重新进行授权确认(即使Google端整体会话还在)。这个方式虽然步骤稍繁琐,但完全符合Google的官方流程。调用OAuth 2.0令牌撤销端点
虽然不能直接终止Google端的会话,但你可以主动撤销用户授予你应用的访问令牌和刷新令牌。调用这个官方接口后,即使Google端会话仍存在,你的应用也无法再使用旧令牌访问用户数据,下次登录时用户需要重新完成授权流程(如果Google端已登录,可能还是一键确认,但至少之前的令牌完全失效)。
具体调用方式:发送POST请求到https://oauth2.googleapis.com/revoke,携带参数token(值为你要撤销的访问令牌或刷新令牌)。优化用户体验,接受现有行为
事实上,很多主流网站都采用这种处理方式:登出时仅清除自身网站的会话Cookie,用户下次用Google登录时直接跳过凭据输入。你可以在登出成功页面添加提示,明确告知用户“你已成功退出本网站,但仍保持Google账户登录状态。如需完全退出所有Google服务,请前往Google账户设置”,让用户有清晰的预期。
另外你提到的通过iframe访问Google全局登出URL的方式,确实会终止用户所有Google服务的会话,这并不适合仅针对单个应用的场景,不建议采用。
内容的提问来源于stack exchange,提问作者Ceilingfish

