什么是单点登录
单点登录指用户只需输入一次账密,在一处完成登录,之后可以直接进入所有业务系统。想要完成单点登录的效果,必须有一个唯一身份源,其他业务系统必须配合完成改造和对接。
登录 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 登出,有以下几种方式:
- 携带用户 token 调用 Authing API 登出。
- 携带用户的 cookie 访问 Authing 登出端点。
- 使用标准协议的 Logout flow。
- 用户池管理员指定一批用户 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 登出后回调到业务系统的登出端点,该端点需要负责将业务系统全部退出,并通知相关的外部身份源将用户登出。