SSO 即 Single Sign On,是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录。SSO 一般都需要一个独立的认证中心(passport),子系统的登录均得通过 passport ,子系统本身将不参与登录操作,当一个系统成功登陆之后, passport 将会颁发一个令牌给各个子系统,子系统可以拿着令牌获取各自的受保护资源,为了减少频繁认证,各个子系统在被 passport 授权以后,会建立一个局部会话,在一定时间内可以无需再次向 passport 发起认证。

会话机制

即让服务器和浏览器共同维护一个状态。
浏览器第一次请求服务器,服务器创建一个会话,并将会话的 id 作为响应的一部分发送给浏览器,浏览器存储会话 id ,并在后续第二次和第三次请求中带上会话 id ,服务器取得请求中的会话 id 就知道是不是同一个用户了。

单点登录涉及 sso 认证中心与众子系统,子系统与 sso 认证中心需要通信以交换令牌、校验令牌及发起注销请求,因而子系统必须集成 sso 的客户端, sso 认证中心则是 sso 服务端。

sso的实现(例子)
sso-client与sso-server要实现的功能
sso-client

  1. 拦截子系统未登录用户请求,跳转至 sso 认证中心
  2. 接收并存储 sso 认证中心发送的令牌
  3. 与 sso-server 通信,校验令牌的有效性
  4. 建立局部会话
  5. 拦截用户注销请求,向 sso 认证中心发送注销请求
  6. 接收 sso 认证中心发出的注销请求,销毁局部会话

当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。
sso-server

  1. 验证用户的登录信息
  2. 创建全局会话
  3. 创建授权令牌
  4. 与 sso-client 通信发送令牌
  5. 校验 sso-client 令牌有效性
  6. 系统注册
  7. 接收 sso-client 注销请求,注销所有会话