ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:认证与会话管理实战

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:认证与会话管理实战 GoWind Admin风行 — 开箱即用的企业级全栈中后台框架认证与会话管理实战登录是管理系统被攻击最多的面撞库、爆破、凭证枚举、会话劫持。很多项目的登录只有验密码、发 token两步其余全靠运气。风行GoWind Admin把认证做成了纵深防御的完整链路限流、验证码、登录策略、防枚举、MFA、令牌轮换、会话吊销层层设卡。本文拆解这条链路的设计与取舍。一、登录链路十一道闸门按序把关一次POST /admin/v1/login背后的完整链路按执行顺序1 限流预检 IP 用户名双维度 Redis 计数锁定中直接 400被封锁 IP 连用户表都不查 2 图形验证码 Header 携带Redis verify-and-delete单次有效 3 租户解析 tenant_code 空平台登录非 ON 租户统一文案拒绝 4 登录策略·全局段 IP / 时间窗 / 设备黑名单白名单反向约束 5 标识符反查 输入含 走邮箱、纯数字走手机号反查真实用户名 6 凭证校验 AES 解密入参 → bcrypt 比对用户不存在也跑一次假 bcrypt恒定时间防枚举 7 纵深校验 凭证行租户必须等于用户行租户 8 登录策略·用户段 定向到具体用户的策略条目 9 授权丰富 角色链 → 权限码 → 管理员旗标 → 数据范围/字段黑名单进令牌 10 MFA 闸门 绑有 TOTP 则不发令牌签发一次性挑战走二次验证 11 签发 access refresh 双令牌jti 关联Redis 令牌对缓存防枚举是贯穿性的用户不存在 / 被冻结 / 密码错误归并为同一文案忘记密码对不存在的邮箱返回同样的成功失败的真实原因只进服务端日志与登录审计。攻击者无法从响应区分有没有这个账号。二、令牌体系短命的 access 会旋转的 refresh双令牌设计的关键决策access token 只活在内存三端都不落 localStorage/sessionStorage——XSS 偷不走页面刷新就没了的东西refresh token 在 HttpOnly CookieJS 不可读仅在刷新请求时浏览器自动携带给前端单独下发一个可读的refresh_exp纯过期时间戳无敏感信息用于静默恢复与定时刷新每次刷新必轮换刷新端点用 Redis Lua 脚本原子完成验证旧令牌对 → 删除旧令牌对jti 更换、旧 access/refresh 立即作废——被偷走的旧凭据用一次就失效吊销即时生效每个请求验签之外还要做 Redis 缓存核对令牌不在缓存即拒。删除缓存键 当场下线密钥轮换 全量吊销 全员重登权限随刷新重算角色、数据范围、字段黑名单在每次刷新时重新聚合进新令牌——权限变更最迟一次刷新即生效。401 处理也是工程化的并发多个请求同时 401 时单飞刷新队列保证只发一次刷新请求成功后重放排队请求失败清队列走重登——不会出现十个请求打十次刷新把令牌对打打架。三、MFATOTP 二次验证的细节管理页/个人中心可绑定 TOTPGoogle Authenticator 兼容secret 加密落库登录时绑定了 MFA 的用户拿到的是一次性operation_id挑战而非令牌二次验证端点的防护做到了原子级挑战单次有效、并发同挑战仅一人能消耗成功防双花、错码计入登录限流、超限作废。平台管理员可对指定用户做 MFA 救援重置告警留痕用户可自助解绑。中间件对 MFA 的探测是fail-closed的查询状态失败就拒绝登录绝不静默降级成单因子。四、限流与登录策略可配置的准入控制登录限流IP 与用户名双维度 Redis 计数阈值 5 次、锁定窗口 15 分钟Lua 脚本原子判定机器令牌交换复用同一限流器AK 维度。Redis 不可用时 fail-open——防御性增强不阻断登录可用性登录策略管理页维护 IP精确/CIDR、时间窗支持跨午夜、设备三类的黑/白名单支持全局段与定向到具体用户。两段式执行全局策略在查用户表之前生效被封锁 IP 连一次数据库查询都不消耗。五、会话管理每一次登录都可见、可终止令牌对的 jti 同时是会话元数据的键登录时间、客户端类型、IP、UA 全部落 Redis。于是在线用户页平台侧全量会话列表单会话强制下线吊销即断下一次请求即 401我的活跃会话每个用户看到自己散在各设备/浏览器的会话可远程撤销忘在公司电脑上的那次登录改密即踢人密码修改后该用户全部端全部会话吊销盗号者拿着旧凭据无处可依找回密码重置成功同样触发全量吊销。六、多方式登录与机器凭证登录标识符自动识别形态用户名直登、含走邮箱反查、纯数字走手机号反查——一套端点覆盖三种登录方式。系统间对接则走 AK/SK 机器凭证交换AccessKey 恒定时间比对 独立限流签发租户作用域的机器 JWT人机身份各走各的闸门。结语认证的可靠性不在某一个酷炫技术而在每一层都不偷懒防枚举做到恒定时间与统一文案令牌做到短命、旋转、可吊销MFA 做到原子防双花会话做到可见可终止。风行把这条链路做成了开箱默认而不是上线前的安全加固清单。项目地址https://github.com/tx7do/go-wind-admin / https://gitee.com/tx7do/go-wind-admin在线演示https://demo.admin.gowind.cloud前端/ https://api.demo.admin.gowind.cloud/docs/后端 Swagger
返回列表