OAuth 中通用注销的替代方案是什么?

What are alternatives to Universal Logout in OAuth?

OAuth 不支持 'Universal Logout' 的概念。注销一个应用程序不会让您注销另一个应用程序,因为这不是所需的行为。

例如,如果 Facebook 用户要注销 Facebook,则不应将他们从 Spotify 注销(如果他们使用的是 Facebook OAuth)。

我受雇创建一项服务,该服务充当子应用程序,以透明地将自身嵌入到较旧的单体 Web 应用程序的工作流程中。例如,单体应用程序有一个 link 到子应用程序,点击 link 透明地进入子应用程序。子应用程序也 links 返回到整体,它透明地引导回来。用户能够在单体应用和子应用程序之间来回穿梭。

该子应用程序当前使用 OAuth 2.0 通过单体进行身份验证。从用户的角度来看,这主要是一种透明的交换。

对于用户来说,两个应用程序工作流应该交织在一起。鉴于此,'Universal Logout' 的概念是可取的。对用户来说似乎是单个应用程序的应用程序不应有一些页面已注销而其他页面已登录。

我目前已经实施了 'Universal Logout',但我感觉这不是 OAuth 的一部分,也许这意味着应该以不同的方式解决这个问题。

鉴于这种情况,是否有替代方法来在 OAuth 中实施 'Universal Logout'?甚至应该使用 OAuth 吗?如果没有,应该怎么办?如何更好地构建它?

OAuth 2.0 本身并不是一种让用户登录应用程序的协议 (http://oauth.net/articles/authentication/);一些(如 Facebook)已经构建了 OAuth 2.0 的自定义扩展来做到这一点;这些提供商也必须开始支持自定义单点注销机制,以解决您提到的问题。

然而,有一个 OAuth 2.0 的标准化扩展,可以让用户登录到名为 OpenID Connect (http://openid.net/specs/openid-connect-core-1_0.html). That has an extension called Session Management (https://openid.net/specs/openid-connect-session-1_0.html) 的应用程序,它允许您以标准化方式描述的功能。