01
单点登录
假如你是企业管理者,你的公司正在使用包括考勤系统、差旅报销系统、在线协同工具等十几甚至几十套不同的软件系统,你的员工是否可以在这些不同的系统中,一次登录全部搞定?有没有发生多人共享同一账号,造成身份管理混乱的情况?
企业在统一员工身份管理时,面临诸多挑战:
1. 应用太多,员工账号密码众多,复杂难记,或设置单一,存在安全隐患。
2. 登录入口众多,没有统一界面,切换频繁,体验差。
3. 不同应用和员工数据之间割裂,不同设备和操作系统不兼容。
4. 不同应用、各地分支机构,档案信息不同。
单点登录可以解决这些痛点。
单点登录是一个身份验证机制,英文全称 Single Sign On,简称 SSO。它的定义是:在多个应用系统中,用户只需要登录一次,即可访问所有相互信任的应用系统,就像健康保一样,为你的身份做担保。
顾名思义,多个应用系统在同一个地方进行认证。这样每个人用一个账号就可以登录多个系统。多个系统实现单点登录后,会有以下的效果:
- 在任何一个系统登录后,再访问其他系统,不必再次输入密码进行认证。至于需不需要再点一次登录按钮,取决于业务系统,不取决于中央认证服务器。
- 在任何一个系统登出后,是否从其他系统退出,是否从中央认证服务器退出,也取决于场景和实现。
02
中央认证服务器
解决唯一可信数据源的问题
单点登录需要具备一份唯一可信的用户目录,全部系统都在中央认证服务器完成认证,信赖中央认证服务器返回的身份信息。这可以实现一个账号登录多个系统的效果。
建议使用 OIDC 协议作为单点认证的身份协议,有以下好处:
- 无需进行字段对齐,协议规定了字段标准
- 轻量、安全,OIDC 是 OAuth 2.0 的超集,学习成本低
解决子系统之间登录态问题
为了让子系统之间能够互相识别出登录态,需要额外的工作。常用的方式一般有共享 Cookie,跨域发送 Cookie 查验登录态,静默检测中央认证服务登录态。
共享 Cookie
如果两个系统在同一个主域名下,可以通过在根域名写 Cookie 的方式来共享登录状态。
跨域发送 Cookie 查验登录态
子系统可以跨域发送中央认证服务器的 Cookie 到中央认证服务器来检验用户是否已经登录,需要中央认证服务器的支持。
静默检测登录态
在访问每个系统时,先到中央认证服务器检测登录态,可以在一个隐藏的 iframe 里面向 OIDC 服务发起登录请求,prompt=none 参数为静默登录。如果用户曾经在其他系统登录成功,当前系统会收到该用户的 token,当前业务系统在用户无法察觉的情况下与浏览器建立会话,完成登录;如果用户没有登录,当前系统应该将用户转到中央认证服务器,让用户完成认证,然后与用户建立会话。
登出
用户在一个业务系统登出后,业务系统可以通知中央认证服务器,退出用户与中央认证服务器的登录状态,通知其他业务系统,将用户退出。也可以不进行通知,用户可以继续浏览其他系统。
点击此处了解更多行业身份管理
「解决方案」以及「最佳实践案例」