单点登录与单点登出

什么是单点登录

单点登录指用户只需输入一次账密,在一处完成登录,之后可以直接进入所有业务系统。想要完成单点登录的效果,必须有一个唯一身份源,其他业务系统必须配合完成改造对接

登录 Authing

Authing 支持多种用户登录方式,分为账密认证,标准协议认证,三方身份源认证。他们的区别在于 Authing 将用户信息传递给业务系统的方式不同。无论使用哪种方式,用户完成认证后,他在 Authing 就是已登录的状态,业务系统可以向 Authing 询问某个用户是否为登录态,从而完成多个应用系统间的单点登录不是任何人都可以随意询问用户的登录状态,这样会有安全隐患,只有用户自己可以询问自己的登录状态,用户池管理员可以询问用户池下任意用户的登录状态。

账密认证

通过调用 Authing 的账密认证 API,可以完成最基本的认证,用户信息和 token 直接在请求的响应体中返回

标准协议认证

Authing 支持 OIDC、OAuth 2.0、SAML2、CAS 1.0、LDAP 标准认证协议。标准协议会按照特定的方式传递用户信息,例如 OIDC 协议中,用户认证后 Authing 不会直接将用户的信息返回,而是返回一个授权码 code,再使用 code 在业务后端换取 Access token,再用 Access token 获取用户信息。成熟、正规的业务系统产品都会支持标准协议,使用标准协议对接可以一劳永逸地完成对接。标准协议的推荐度:OIDC > SAML2 > CAS 1.0 > LDAP > OAuth2.0。

三方身份源认证

Authing 支持使用其他三方身份源进行认证,可以在其他 OAuth 2.0、OIDC、SAML2、CAS 2.0、LDAP 身份源完成用户认证。认证后 Authing 会通过标准协议在 URL query 中将用户信息返回到业务系统。

什么是单点登出

单点登出指用户点击一次登出就能退出他登录的所有系统。分为三种系统:Authing 认证中心、业务系统、外部身份源。想要完成单点登出的效果,必须有一个唯一身份源,其他业务系统必须配合完成改造对接,主要是处理来自身份源的登出回调,并将自己的登录态释放。

登出 Authing

用户在 Authing 登录后,用户在 Authing 就是登录态。用户登出时 Authing 会销毁用户的会话,用户在 Authing 就是登出状态。

如果想将用户在 Authing 登出,有以下几种方式:

  1. 携带用户 token 调用 Authing API 登出。
  2. 携带用户的 cookie 访问 Authing 登出端点。
  3. 使用标准协议的 Logout flow。
  4. 用户池管理员指定一批用户 id 进行踢下线操作。

用户登录态与应用、设备之间存在以下几种登出模式,你可以根据业务场景进行选择。

单设备单应用单点登出

如下图所示,该用户在手机、浏览器、桌面端登录了 APP 1,在浏览器和桌面端登录了 APP 2。

现在希望实现单设备单应用的单点登出,在收到登出请求后,Authing 会删除用户在当前设备下 APP 1 的会话,因此用户当前设备下的 APP 1 应用就是登出状态,APP 1、APP 2 在其他设备仍然是登录态。

举例:该用户在手机、浏览器、桌面端登录了 APP 1,在浏览器和桌面端登录了 APP 2。在浏览器退出 APP 1 后,手机、桌面端上的 APP 1 仍然保持登录,浏览器、桌面端的 APP 2 仍然保持登录。

跨设备单应用单点登出

如下图所示,该用户在手机、浏览器、桌面端登录了 APP 1,在浏览器和桌面端登录了 APP 2。

现在希望实现跨设备单应用单点登出,在收到登出请求后,Authing 会删除用户在 APP 1 下的所有会话,因此用户任何设备的 APP 1 应用都是登出状态,但在 APP 2 下仍然是登录状态。 举例:该用户在手机、浏览器、桌面端登录了 APP 1,在浏览器和桌面端登录了 APP 2。在浏览器退出 APP 1 后,手机、桌面端上的 APP 1 全部退出,浏览器、桌面端的 APP 2 仍然保持登录。

单设备跨应用单点登出

如下图所示,该用户在手机、浏览器、桌面端登录了 APP 1,在浏览器和桌面端登录了 APP 2。

现在希望实现单设备跨应用单点登出,在收到登出请求后,Authing 会删除用户在当前设备下所有应用的会话,因此用户在当前设备下任何应用都是登出状态。 举例:该用户在手机、浏览器、桌面端登录了 APP 1,在浏览器和桌面端登录了 APP 2。在浏览器退出 APP 1 后,手机、桌面端上的 APP 1 仍然保持登录,浏览器上的 APP 2 退出,桌面端上的 APP 2 仍然保持登录。

跨设备跨应用单点登出

如下图所示,该用户在手机、浏览器、桌面端登录了 APP 1,在浏览器和桌面端登录了 APP 2。

现在希望实现跨设备跨应用单点登出,在收到登出请求后,Authing 会删除用户在所有应用下的所有会话,因此用户在任何设备下任何应用都是登出状态。 举例:该用户在手机、浏览器、桌面端登录了 APP 1,在浏览器和桌面端登录了 APP 2。在浏览器退出 APP 1 后,手机、桌面端上的 APP 1 退出,浏览器、桌面端上的 APP 2 退出。

登出业务系统和外部身份源

以上操作的登出,都是让用户从 Authing 登出,业务系统必须处理 Authing 的登出回调,并从自己的业务系统执行退出动作。从 Authing 登出后回调到业务系统的登出端点,该端点需要负责将业务系统全部退出,并通知相关的外部身份源将用户登出。