梦想之家

Redis + Nginx 实现 Token 与权限控制

分享一套网关鉴权、会话缓存与权限判定协同工作的系统架构实现方案,让鉴权前置、业务更轻。

架构概览

把 Token 校验与权限拦截下沉到 Nginx + Redis,业务服务专注领域逻辑。

本方案以 Nginx 作为统一入口与鉴权网关,以 Redis 存储 Token 会话与权限快照。 请求到达业务服务前完成身份校验与权限判定,未授权流量在网关层直接拦截,降低后端重复鉴权成本,便于水平扩展与统一管控。

客户端 Nginx 网关 Redis 业务服务

核心分层

三层协同:网关拦截、会话缓存、权限判定,职责清晰可替换。

Nginx 鉴权网关

统一入口解析 Token,调用 Redis 校验会话,按路由与权限规则放行或拒绝。

  • 提取 Authorization / Cookie
  • Lua / 模块查询 Redis
  • 失败返回 401 / 403

Redis Token 中心

集中存放 Token、过期时间、用户标识与权限缓存,支持快速读写与主动失效。

  • Token → 用户会话映射
  • TTL 自动过期续期
  • 踢下线 / 强制注销

权限控制模型

将角色、资源、动作沉淀为可缓存的权限快照,网关按路径与方法完成细粒度校验。

  • RBAC / 资源动作映射
  • 权限快照写入 Redis
  • 变更后主动刷新缓存

鉴权流程

从登录签发到网关校验,再到业务转发的完整链路。

  1. 01

    登录签发 Token

    认证服务校验账号后生成 Token,将会话与权限快照写入 Redis,并设置合理 TTL。

  2. 02

    请求携带凭证

    客户端在 Header 或 Cookie 中携带 Token,访问受保护资源时统一经过 Nginx。

  3. 03

    网关查询 Redis

    Nginx 提取 Token,查询 Redis 是否存在有效会话;无效或过期则直接拒绝。

  4. 04

    权限判定与转发

    比对路由所需权限与会话权限集;通过后注入用户标识头,转发至上游业务服务。

实现要点

落地时可优先把握存储结构、网关校验与权限刷新三条主线。

Redis 数据结构建议

  • auth:token:{token} → userId、roles、expire
  • auth:perm:{userId} → 权限编码集合
  • auth:user:tokens:{userId} → 多端会话索引

Nginx 校验策略

  • access 阶段读取 Token 并查 Redis
  • 白名单路径跳过鉴权(登录、健康检查)
  • 校验成功后透传 X-User-Id / X-Roles

权限变更与失效

  • 角色变更后重写权限快照
  • 注销时删除 Token 与会话索引
  • 敏感操作可缩短 TTL 并强制续签

方案价值

鉴权前置到网关、会话集中到 Redis、权限可缓存可失效——在性能、安全与可运维之间取得平衡,适合作为统一鉴权层的实现基线。

回到分层