本文目录
认证升级的完成标准不是新登录页可用,而是每个合法用户仍是同一个人、每个旧会话都能受控退出
面向维护旧 ERP、CRM、订单平台或多端业务系统的产品、研发、安全与运维负责人:先盘点账号来源、登录入口、会话载体、找回流程、机器调用和当前退出语义,为每个自然人及服务账号建立不可变主体标识。再按入口选择服务端会话、网关或 BFF、OIDC 单点登录等路线,通过短期共存、一次性交换和分批失效完成迁移。认证只回答“是谁”,菜单、动作与数据范围仍由业务授权控制;不能用登录成功代替权限验收,也不能用永久兼容旧 Token 换取表面平滑。
按客户端形态和现有边界选择迁移路线
| 现状 | 建议路线 | 需要防止的风险 |
|---|---|---|
| 单一 Web 旧系统 | 保留服务端会话语义,先替换会话存储、Cookie 策略与登录入口,再逐步收回旧会话 | 只换登录页面,旧 Session 仍可长期绕过新策略 |
| 前后端分离 Web | 优先由同源后端或 BFF 持有上游令牌,浏览器使用受保护的短期会话 Cookie | 把长期访问令牌复制到前端可读存储并散落在日志与第三方脚本中 |
| 多系统统一登录 | 采用经验证的 OIDC 授权码流程,固定发行方、客户端、回调地址、主体映射与登出责任 | 把 OAuth 授权直接当作用户身份,或让各系统按邮箱自行合并账号 |
| 小程序与原生 APP | 为每类客户端单独登记凭据和回调边界,使用短期访问令牌与受控续期,分版本退出旧协议 | 所有客户端共用密钥、刷新令牌永久有效,旧版本无法单独撤销 |
适用边界:先区分身份认证、会话管理与业务授权
本文处理用户如何证明身份、登录状态如何延续及何时失效,适用于仍在运行且不能一次清空全部账号的企业系统。用户能否审批、查看某个部门或导出敏感数据,属于业务授权,必须另行设计和验收。
先列出所有入口:旧网页登录、管理后台、小程序、APP、合作方门户、扫码登录、API 密钥和后台任务。对每个入口记录账号来源、凭证形式、会话保存位置、有效期、续期方式、登出动作、密码找回、封禁流程、调用方版本与责任人。浏览器 Cookie、请求头、URL 参数、设备本地存储和反向代理注入都要以实际流量与配置核对,不能只读登录控制器。
本文不主张所有项目都建设统一身份平台。只有一个内网应用、用户少且没有跨系统登录需求时,修复服务端会话、Cookie 和账号生命周期可能更合适;已有合规身份供应商时,应优先验证标准集成能力。员工目录、消费者账号、合作方账号和机器身份的生命周期不同,不宜为了“一个账号中心”强行混成同一审批规则。
- 输出入口、账号源、凭证、会话、找回、退出和调用版本七类清单。
- 把认证成功与角色、动作、数据范围授权分成不同验收项。
- 明确本次不迁移的客户端、机器账号和人工补救流程。
先建立稳定主体映射,再处理密码与资料合并
邮箱、手机号、工号和昵称都会变,也可能重复或被重新分配;它们适合作为可验证属性,不适合作为跨系统唯一身份。迁移需要一个不可复用的内部主体标识,并保存旧账号到新主体的可审计映射。
从旧账号、人员或客户主数据、组织状态和实际登录记录交叉核对,区分同一人多账号、多人共用账号、已离职账号、测试账号和服务账号。自动合并只用于规则明确且证据足够的集合;姓名相同、邮箱相近或手机号曾被他人使用时进入人工复核。合并后还要决定历史订单、审批记录和审计日志引用哪个主体,不能只改用户表而留下无法解释的历史归属。
旧密码不应被还原或在系统之间明文传递。若现有密码摘要仍可安全验证,可在用户成功登录后按新策略重新派生并标记升级;无法验证、算法不再符合要求或身份存在疑问时,使用受控的重置与重新绑定流程。迁移通知不包含密码或可长期使用的登录链接,客服也不能通过口头信息直接替用户合并高风险账号。
- 为自然人、外部客户和机器身份分别定义稳定主体标识。
- 账号合并、拆分、停用和恢复均保留依据、操作者与时间。
- 用成功登录后升级或受控重置处理旧凭证,不复制明文密码。
把会话契约写清楚,不用一种 Token 代替所有状态
会话契约至少包括签发方、接收方、主体、客户端、权限范围、签发时间、到期时间、续期方式和撤销依据。服务端 Session、OIDC ID Token、访问令牌和刷新令牌用途不同,不能因为格式都像字符串就互换。
浏览器场景先确认是否真的需要让 JavaScript 读取上游令牌。若由同源后端或 BFF 代理业务请求,可将身份供应商令牌留在服务端,浏览器只持有设置 Secure、HttpOnly、合适 SameSite、Path 和作用域的会话 Cookie;服务端仍要执行闲置与绝对到期、登出失效和敏感事件重新认证。用户从匿名变为已登录或权限显著变化时更换会话标识,避免继续接受攻击者预先固定的标识。
多系统单点登录应固定可信发行方、客户端标识、精确回调地址和预期接收方,验证 OIDC 响应并将外部 subject 映射到内部主体。ID Token 用于向客户端表达认证结果,不应直接替代面向业务 API 的访问令牌;API 还要核对令牌接收方、范围、时效和必要的撤销状态。自制签名 Token 若缺少轮换、受众和失效机制,不能只换密钥名称后继续无限兼容。
- 逐类说明 Session、ID Token、访问令牌和刷新令牌的唯一用途。
- Cookie、令牌与服务端会话都设置明确期限和撤销路径。
- 登录、提权、找回账号和绑定新设备后重新评估或更新会话。
实施步骤:用短期共存和一次性交换迁移入口
迁移应按客户端和风险分批进行,而不是让每个业务服务同时理解全部新旧凭证。推荐在受控入口完成旧会话校验、新主体映射和新会话签发,业务服务只接收约定后的身份上下文。
第一步冻结当前入口清单并增加不记录凭证值的审计;第二步建立身份映射和会话契约;第三步选择低风险员工或测试租户,让新入口在隔离范围签发新会话;第四步为仍合法的旧会话提供一次性交换,交换成功后使原凭证失效,交换失败回到明确的重新登录流程;第五步按 Web、后台、小程序和 APP 版本逐批放量;第六步停止签发旧凭证,观察最长必要兼容期后关闭旧验证器。
共存期不能变成永久双轨。每种旧凭证都要有最后签发日、最后接受日、负责应用和退出证据;无法升级的旧客户端应限制能力或给出升级提示,而不是无限延长高权限访问。新入口故障时,回滚可以暂时恢复旧登录签发,但只在预定窗口内进行,并保留已撤销会话、账号封禁和密码变更结果,不能恢复到一个忽略安全事件的旧快照。
- 迁移顺序、放量对象、兼容截止与回滚开关均有负责人。
- 一次性交换绑定原会话、客户端和短时随机凭据,成功后不可重放。
- 业务服务通过统一身份上下文工作,不各自复制新旧校验逻辑。
退出、续期与账号恢复必须在所有端形成闭环
“退出成功”至少要说明当前设备、当前应用还是全部设备失效。关闭浏览器或删除本地 Cookie 不会自动撤销服务器端会话与已泄露令牌,密码重置、离职停用和风险处置也需要触发相应撤销。
建立会话或授权记录,能够按主体、客户端、设备或会话族定位并撤销。对公开客户端发放刷新令牌时,依据所用协议和风险选择发送方约束或刷新令牌轮换;检测到已被替换的令牌再次使用时,按会话族处置并要求重新认证。访问令牌寿命、离线能力和撤销传播时间由业务风险与网络条件共同决定,不照抄统一分钟数。
账号找回和绑定手机号、邮箱、企业目录时要防止把攻击者的新凭据绑定到受害者旧身份。对管理员、付款、导出等敏感操作设置近期认证或额外确认,并记录认证事件而非秘密本身。小程序和 APP 还要覆盖换机、卸载重装、客户端时钟异常、后台恢复、弱网重试和旧版本并存,确保续期失败不会进入无休止循环或把用户请求重复提交。
- 定义单端退出、全端退出、密码变更、封禁和离职各自的失效范围。
- 刷新、撤销和重新认证是同一生命周期,不只测试首次登录。
- 审计记录主体、客户端、结果和原因,绝不记录密码或完整令牌。
验收与回滚:证明身份不串、会话能撤、旧入口可关闭
验收需要同时覆盖正确账号映射、协议校验、客户端兼容、异常恢复和旧通道退役。只统计登录成功率会掩盖串号、退出后仍可访问、旧 Token 继续有效和权限继承错误。
准备脱敏测试矩阵:同一人多账号、同名不同人、停用账号、共享账号、首次登录升级、密码重置、并发设备、会话过期、全端退出、令牌重放、错误发行方或接收方、回调地址不匹配、密钥轮换、身份供应商不可用,以及 Web、小程序、APP 的当前与最低支持版本。每项记录期望主体、会话变化、业务授权结果和审计事件,并由业务与安全负责人共同确认高风险差异。
灰度期间观察认证成功与失败原因、账号映射待审数量、交换成功率、刷新异常、撤销传播、重新登录量和各客户端版本分布;指标不包含账号密码、验证码或完整 Token。达到退出条件后先停止旧凭证签发,再证明超过兼容截止的旧凭证都被拒绝,最后删除旧验证路径与密钥读取权限。回滚演练要证明能恢复登录服务,同时不会复活已注销、已封禁或已撤销的身份状态。
- 使用身份、协议、客户端和生命周期四维测试矩阵留存证据。
- 上线阈值按失败原因和用户群体判断,不用单一成功率掩盖高风险错误。
- 退役证据包括停止签发、拒绝旧凭证、移除验证器和收回旧密钥权限。
需求讨论中的问题
登录升级后,原来的角色权限会自动正确吗?
不会。登录认证只确定主体身份;角色、动作和数据范围必须按新的主体映射重新核对。尤其账号合并、组织调动和管理员账号,需要单独做越权与历史归属验收。
把旧 Session 全部换成 JWT,就算完成现代化吗?
不算。JWT 只是一种令牌格式,不能自动解决受众校验、撤销、续期、浏览器存储、密钥轮换和账号生命周期问题。单一 Web 系统继续使用受控服务端会话也可能更合适。
为了用户无感,可以永久接受旧 Token 吗?
不应永久接受。应给每类旧凭证设最后签发与接受日期,通过一次性交换或重新登录完成迁移;永久兼容会让旧算法、旧密钥和旧客户端持续绕过新策略。
单点登录退出后,所有业务系统都会马上退出吗?
只有在事先定义并实现了各应用的本地会话失效、通知或查询机制时才成立。身份供应商退出、业务应用退出和访问令牌到期是不同事件,必须按采用协议和产品能力逐项验收。
旧系统登录认证升级验收清单
可逐项勾选,辅助本次阅读;刷新页面后不保留。
参考资料
技术概念可进一步阅读以下资料;文中的业务场景与实施清单用于方案讨论。
- IETF RFC 9700 · Best Current Practice for OAuth 2.0 Security
核对授权码流程、访问令牌受众限制,以及公开客户端刷新令牌使用发送方约束或轮换检测重放的现行安全建议。
- OpenID Foundation · OpenID Connect Core 1.0
核对 ID Token、发行方、接收方、客户端与用户主体等认证语义;实际集成还需遵循身份供应商的受支持配置。
- OWASP Cheat Sheet Series · Session Management
核对会话标识更新、Cookie 属性、服务端失效与重新认证边界;Cookie 具体策略仍需按跨站流程和浏览器场景验证。
旧账号、Session 与多端 Token 无法一次切换?
提供登录入口、账号来源、会话方式、客户端版本和退出规则,月弦科技可以帮助拆分身份映射、共存切换、撤销与验收范围。