← 每日面试题 学习看板

你们ERP系统的登录是怎么实现的是单点登录还是什么

面试题/真实面试/2021/你们ERP系统的登录是怎么实现的是单点登录还是什么.md

你们ERP系统的登录是怎么实现的是单点登录还是什么

首次来源:京东 2021 面试部门零售

原题

你们ERP系统的登录是怎么实现的?是单点登录还是什么?

完整讲解(权威版)

最后更新:2026-10-30 · 基于第 1 次作答

L1 · 30 秒速记

结论:登录体系先分清"单机登录 / 单点登录 SSO",再讲 token 方案与安全细节。 关键词:Session → Token · Redis 存储 · SSO · JWT vs CAS · 同账号互踢 边界:内部系统常做"单机 + 同账号互踢",对外多系统才需要真 SSO。

L2 · 核心讲解

核心考点定位:面试官想听的是"你们怎么做的 + 为什么这么做",重点是 SSO 的判定和 token 的存储/过期/互踢设计。

机制链(≥3 环):

  1. 演进 → 早期 Session 存在应用服务器内存,分布部署后不共享,改为无状态 Token。
  2. 存储 → Token 放 Redis 并与账号绑定,可设置过期时间,支持同账号互踢(新 token 覆盖旧)。
  3. 安全 → 密码加盐哈希(如 SHA256+盐/BCrypt)防彩虹表,验证码防爆破,登录审计记录 IP/时间。

证据锚点:

对比与权衡:

方案状态跨域主动失效适用
Session服务端有状态需粘性/共享存储✅单应用
Redis Token服务端有状态✅✅分布式、可互踢
JWT无状态✅❌(靠短过期)跨域、高并发
CAS集中✅✅多系统统一 SSO

常见误区:

  1. 错误:把"单机登录"说成"单点登录" → 正确:单机=一个应用内唯一会话,SSO=一次登录多系统复用 → 为什么:概念不同,SSO 强调跨系统。
  2. 错误:token 只放内存 → 正确:放 Redis/共享存储才能分布式失效 → 为什么:多实例下内存无法共享。
  3. 错误:密码直接 MD5 → 正确:加盐哈希(BCrypt 自带盐)→ 为什么:MD5 无盐易被彩虹表破解。

适用边界:如果系统只有一个应用且无跨域需求,Redis token 即可;多系统(如 ERP 下多个子系统)才升级 CAS/JWT SSO。

延伸追问(≥3)

  1. 同账号互踢怎么实现?
  1. Token 放 Redis 和 JWT 怎么选?
  1. 密码存储为什么必须加盐?

面试者参考回答(400–700 字)

【结论】 面试官您好,我们 ERP 系统用的是单机登录,不是单点登录——它保证一个账号同一时间只有一个会话,用 Redis 存 token 实现。

【三点】 第一,我们最初用 Session,后来分布式部署后 Session 无法跨实例共享,就换成 Token 方案:登录成功发一个令牌,客户端后续带这个令牌访问,令牌存 Redis 里并和账号绑定,这样所有实例共享同一份会话状态。第二,实现同账号互踢是核心:同一账号再次登录时,用 userId 作为 Redis 的 key 覆盖旧 token,旧 token 下次校验就失效了,保证同一时间只有一个 token 在用一个账号——这对内部 ERP 防止账号共享很有用。第三,安全细节我们做了几层:登录时校验验证码防止暴力破解;密码不存明文,用 SHA256 + 独立盐哈希存储,防止拖库后彩虹表破解;同时记录登录的 IP、时间、机器型号做审计。因为这是纯内部系统,没接微信/第三方登录,账号出问题就找 IT 重置密码。

【边界】 当然,这套是"单机 + 互踢",不是真正的单点登录——SSO 的核心是"一次登录,多个系统复用",比如统一认证中心(CAS)或者 JWT 无状态跨域,适合 ERP 下面挂了多个子系统、用户要在子系统间免登录跳转的场景。我们只有单一系统,所以没上 SSO;如果以后系统变多,我会优先考虑 CAS 集中认证或 JWT 双 token,并权衡"可主动失效(Redis)"和"无状态跨域(JWT)"的取舍。

面试记录 2026-10-30(第 1 次)

题目:你们ERP系统的登录是怎么实现的是单点登录还是什么

难度:low

标签:real-interview, computer/security, company/京东

评分:⭐⭐⭐☆☆(3/5)

我的回答

我们之前 ERP 系统登录是使用的单机登录,不算单点登录。账号同时间一个账号只能有一个。使用的方式是 Redis 验证当前这个账号是否在线,如果在线的话,会剔除上一个 Token,保留当前的最新的这个 Token 用户。登录方式是最开始我们其实是用的 Session,后来为了晋升使用分布式,把 Session 换成了 Token,然后发一个令牌,拿这个令牌去访问接口。这个令牌在 Redis 中存储,并且跟账号绑定。如果另一个账号申请了这个令牌,就会把上一个账号退出去,确保同时间只有一个 Token 在一个账号下使用。今日的登录过程,我们会记录登录的 IP 地址、IP 信息,然后登录时间,登录机器的型号。校验时外侧增加了验证码校验,防止有人试密码。由于是内部系统,没有做微信登录之类的功能,直接就是个人账号。如果出现某人账号出现问题了,可以申请 IT 部去进行重置密码。我们密码存储使用的是加密存储,用的是SHA256+独立盐,存储的。

点评

优点:明确"单机登录非 SSO";Redis 存 token + 同账号互踢的机制清晰;Session→Token 演进理由正确;密码 SHA256+盐、验证码、登录审计细节真实。

不足:没答透"单点登录还是什么"的对比——没讲 SSO 的标准方案(CAS 集中认证 / JWT 无状态跨域),停在"我们不是 SSO"。

补充:SSO 核心是"一次登录多系统复用",区分"单机互踢"和"真 SSO"是本题得分点。

完整讲解见上方「完整讲解(权威版)」