Skip to content

单点登录SSO

一、基础概念

1. 定义

单点登录全称Single Sign On,简称SSO。用户仅完成一次登录认证,就能访问体系内所有相互信任的应用、微服务,无需重复输入账号密码登录。

2. 单体与分布式登录核心差异

  1. 单体项目 所有模块运行在同一个Tomcat容器,Session内存共享,登录后全模块免重复登录,不存在跨服务登录问题。
  2. 微服务/分布式项目 登录、商品、订单、支付拆分独立服务,多Tomcat实例之间Session互不共享,传统Session机制无法实现跨服务免登,需要SSO方案解决。

3. 行业主流SSO解决方案

  • JWT(前后端分离微服务最常用)
  • OAuth2.0(第三方授权登录)
  • CAS(传统中心化单点登录框架)

二、网关+JWT实现SSO完整流程

整体架构:浏览器 → 网关 → 各微服务(登录服务、订单、商品、支付)

未登录访问业务接口流程

  1. 浏览器发起下单/商品查询等业务请求,携带Cookie中的Token交由网关处理;
  2. 网关拦截请求,校验Token合法性、有效期;
  3. Token不存在/过期/篡改,网关返回401未授权;
  4. 前端捕获401状态码,自动跳转至登录页面。

用户登录认证流程

  1. 用户在登录页提交用户名、密码;
  2. 请求转发至网关,网关路由到独立登录服务;
  3. 登录服务校验账号密码,认证通过后生成JWT令牌返回给浏览器;
  4. 前端将JWT存入浏览器Cookie,后续所有请求自动携带该Token。

登录后访问任意业务服务流程

  1. 浏览器携带Cookie内的JWT发起业务请求;
  2. 网关统一拦截并校验Token有效性;
  3. Token校验通过,网关解析Token内用户信息,路由请求至目标微服务;
  4. 订单/商品/支付服务直接获取登录用户信息,执行业务逻辑,无需再次登录。

三、JWT单点登录核心逻辑总结

  1. 统一鉴权入口:所有请求经过网关,由网关集中完成Token校验,业务服务无需重复鉴权;
  2. 无状态特性:JWT本身携带用户身份信息,服务端不用Redis持久化会话(可搭配Redis实现主动失效);
  3. 跨服务免登:同一域名/根域名下Cookie可共享,一次登录生成的Token,全业务模块通用。

四、完整总结(面试背诵版)

  1. SSO单点登录指登录一次即可访问所有信任系统,单体依靠容器Session共享实现,分布式多服务Session隔离,必须专用方案。
  2. 主流方案包含JWT、OAuth2、CAS,微服务项目普遍采用网关+JWT实现。
  3. 执行逻辑:未登录访问接口网关校验Token失败返回401跳转登录;登录成功下发JWT存入Cookie;后续所有请求携带Token,网关统一校验后放行到对应业务服务。

五、面试标准简答(面试官提问:单点登录怎么实现)

问:项目里单点登录是怎么实现的?

答:

  1. 先解释单点登录概念:SSO即只登录一次就能访问全部信任应用,单体项目同容器Session共享,微服务拆分后多个服务Session不互通,需要单点登录方案。
  2. 项目采用网关结合JWT实现分布式单点登录: I. 用户访问业务接口时,请求统一经过网关,网关校验请求携带的JWT Token; II. Token无效则返回401,前端跳转登录页面; III. 用户提交账号密码登录,登录服务校验通过生成JWT令牌返回前端,存入Cookie; IV. 之后访问订单、商品、支付等任意服务,请求都会自动携带Cookie内Token,网关验证通过后路由至目标服务,全程不用重复登录。
  3. 除JWT外,行业还有OAuth2、CAS等单点登录实现方案。

Powered by VitePress 1.6.4 | 持续更新中