假如你是企业管理者,你的公司正在使用包括考勤系统、差旅报销系统、在线协同工具等十几甚至几十套不同的软件系统,你的员工是否可以在这些不同的系统中,一次登录全部搞定?有没有发生多人共享同一账号,造成身份管理混乱的情况?
企业在统一员工身份管理时,面临诸多挑战:
1. 应用太多,员工账号密码众多,复杂难记,或设置单一,存在安全隐患。
2. 登录入口众多,没有统一界面,切换频繁,体验差。
3. 不同应用和员工数据之间割裂,不同设备和操作系统不兼容。
4. 不同应用、各地分支机构,档案信息不同。
单点登录可以解决这些痛点。
单点登录是一个身份验证机制,英文全称 Single Sign On,简称 SSO。它的定义是:在多个应用系统中,用户只需要登录一次,即可访问所有相互信任的应用系统,就像健康保一样,为你的身份做担保。
单点登录 SSO 可以安全地确保员工只需要一组账号与密码,或通过标准协议认证、第三方身份源认证,就可以登录所有被授权的应用系统。例如,员工只需要登录个人 OA 系统的账号密码就可以访问飞书、销售易、客户系统等应用程序,无需再次输入账号和密码。
用户在登录后,服务器需要对其身份进行验证,主要实现方式有三种:
方式 1:通过 session 进行验证
session 称为“会话”,session 对象存储特定用户会话所需的属性及配置信息。简言之,session 就是服务器为了储存用户信息而创建的一个验证手段。用户在登录了一个系统后,服务器会将登录信息储存在一个 session 中,产生 session ID,客户端会保存该 ID;当这个用户再登录其他系统时,服务器会自动复制上一个模块的 session 到该服务器的 session 中,以获取用户登录信息,实现用户只登录一次,就可以登录其他系统。在用户退出登录时,服务器会自动删除 session。
整个过程均在服务器端完成,用户实际使用时没有感知。
方式 2:通过 cookie 进行验证
cookie 是某些网站为了辨别用户身份,由服务端生成,发给客户端暂时或永久保存的信息。简言之,cookie 就是一种存储用户数据的媒介。举例来说,当我们打开一个网站,比如新浪、CSDN、知乎时,输入用户名和密码登录后系统会默认存储这些信息,在下一次登录时,就不需要再次输入用户名和密码,而是默认直接登录,进入页面。
方式 3:通过 token 进行验证
token 在身份认证中是令牌的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。简言之,token 就是一种凭证,用户在登录注册时需要获取凭证,在经过验证后,方可登录相关被授权的应用。
用户在首次登录系统时输入账号和密码,服务器会收到登录请求,然后验证是否正确;
服务器会根据用户信息,如用户 ID、用户名、密钥、过期时间等信息生成一个 token 签名,然后发给用户;
用户验证成功后,返回 token;
前端服务器收到 token 后,存储到 cookie 或 Local Storage 里;
当用户再次登录时,会被服务器验证 token;
服务器收到用户登录请求后,对 token 签名进行比对:如果 token 验证正确,用户登录成功;如果 token 验证不正确,用户登录失败,跳转到登录页。
session 与 cookie、token 验证的区别
session | cookie | token | |
存储端 | 服务器 | 客户端(比如浏览器) | 客户端 |
存储量 | 不限,当访问增多时,速度下降 | 不超过 4KB,每个浏览器最多 20 个 | 由开发者设定 |
安全性 | 比 cookie 安全性高,篡改者只能看到session_id,看不到其他信息 | 不安全,本地 cookie 易被盗取,篡改者可以看到该字段所有信息 | 安全,服务端会加密生成的令牌,存在客户端 |
在 Authing 中,无需手动编写操作 session、cookie 或是 token,控制台中可以一键体验单点登录功能,并且支持自建与集成第三方等多种方式,还可以通过 SDK 接入并自定义自己的应用与登录方式。
自建 SSO 方案
开启应用之间的单点登录后,同一个用户池下的不同应用之间的登录状态将会打通,终端用户只需登录一次即可在不同的应用之间畅行。
创建两个应用
首先你可以按照指引创建两个应用。
配置单点登录
进入菜单 应用 > 单点登录 SSO,点击左上角添加应用,然后选择自建应用,在下方的列表里找到刚刚创建的应用,点击 + 号,就完成了多应用单点登录的配置。
体验应用单点登录
进入 单点登录 SSO的应用列表标签,选择一个应用,点击体验登录。
在登录页面完成登录:
成功后会跳转到应用回调地址:
接下来我们点击另一个应用的体验按钮:
用户无需再次输入密码,直接进入了该应用的回调地址:
使用 SDK 接入单点登录
详细的接入流程请见
代码参考:
https://github.com/Authing/authing-sso-demo/tree/feat-sso-v3-demo