← 返回题目列表

API 网关如何做统一鉴权认证?

高频 中等 第 8 / 25 题 更新于 2026/07/28
API网关鉴权JWT认证

简化版

网关统一鉴权指把身份认证和权限校验集中到网关这一层,请求进网关时先校验身份,通过才转发给后端,后端服务不用各自实现鉴权。常见方案是 JWT(JSON Web Token):用户登录后拿到一个 JWT(里面包含用户信息、签名),之后每次请求带上这个 Token;网关用一个**全局过滤器(GlobalFilter)**拦截请求,校验 JWT 的签名和有效期(无需查数据库/会话,无状态),通过则解析出用户信息、放行并把用户信息透传给后端,不通过直接返回 401。这样鉴权逻辑集中一处、后端服务信任「网关来的请求已鉴权」。

详细版

网关鉴权流程(JWT 方案):

1. 用户登录 → 认证服务校验账号密码 → 签发 JWT(含用户ID/角色/过期时间 + 签名)
2. 客户端保存 JWT,之后每次请求在 Header 携带:Authorization: Bearer <JWT>
3. 请求进网关 → 全局过滤器拦截:
   - 白名单接口(登录/注册)→ 直接放行
   - 其他接口 → 校验 JWT:验证签名、检查是否过期
     - 校验失败 → 返回 401,请求不转发
     - 校验成功 → 解析用户信息,放行,并把 userId 等放入请求头透传给后端
4. 后端服务信任网关已鉴权,直接从请求头拿 userId 处理业务

为什么用 JWT:

  • 无状态:Token 自带用户信息 + 签名,网关本地验签即可,无需查数据库/共享 Session,适合分布式。
  • 跨服务传递:解析出的用户信息可透传给后端,各服务都能用。

完整版教学

一、为什么鉴权要放在网关

微服务架构下,如果每个服务都自己做鉴权:每个服务都要写一遍「解析 Token、校验身份、检查权限」的逻辑——重复、易不一致、难维护(改个鉴权策略要改所有服务)。

把鉴权统一放到网关:请求进系统的第一道关就做身份校验,通过了才放进来。好处:

  • 集中统一:鉴权逻辑只在网关写一遍,统一维护,策略变更只改网关。
  • 后端服务解放:后端可以信任「经过网关的请求都已鉴权」(配合内网隔离,后端不直接暴露),自己不用重复做身份校验,专注业务。
  • 安全前置:未授权请求在网关就被拦截,根本到不了后端。

二、JWT:无状态鉴权的基石

网关鉴权最常用 JWT(JSON Web Token)。JWT 是一种自包含的 Token,由三部分组成(用 . 分隔):

  • Header(头部):说明签名算法等。
  • Payload(载荷):存放用户信息(用户 ID、角色、权限、过期时间等)——注意这部分只是 Base64 编码、不加密,别放敏感信息。
  • Signature(签名):用密钥对前两部分签名,防篡改——如果有人改了 Payload,签名就对不上。

JWT 的关键特性是「无状态」:Token 本身就包含了用户信息和防伪签名,服务端验证 Token 只需要用密钥验签 + 检查过期时间,不需要查数据库、不需要存储 Session。这在分布式/微服务场景下极有优势——网关不用维护会话状态、不用依赖共享存储,任何一个网关实例都能独立验证 Token。

三、网关鉴权的完整流程

① 登录签发 Token:用户登录时,认证服务校验账号密码,通过后签发一个 JWT(Payload 里放用户 ID、角色、过期时间,用密钥签名),返回给客户端。

② 客户端携带 Token:客户端保存 JWT,之后每次请求都在请求头带上Authorization: Bearer <JWT>

③ 网关拦截校验:请求进网关,一个全局过滤器(GlobalFilter) 拦截所有请求:

  • 白名单放行:登录、注册等不需要登录的接口,直接放行(不校验)。
  • 校验 Token:其他接口,从请求头取出 JWT,验证签名(防篡改)+ 检查是否过期
    • 校验失败(无 Token / 签名错 / 过期)→ 直接返回 401 Unauthorized,请求不转发给后端。
    • 校验成功 → 从 Token 解析出用户信息,放行,并把用户 ID 等信息放入请求头透传给后端。

④ 后端使用用户信息:后端服务信任网关已鉴权,直接从请求头拿 userId 等处理业务,不再重复校验身份。

四、认证 vs 授权:两个层次

鉴权其实包含两个层次,网关都可以做:

  • 认证(Authentication)你是谁——验证身份(校验 JWT,确认是合法登录用户)。这是网关鉴权的基础。
  • 授权(Authorization)你能做什么——验证权限(这个用户有没有权限访问这个接口/资源)。可以在网关根据 Token 里的角色/权限做粗粒度的权限校验;细粒度的(如数据级权限)通常在后端业务里做。

网关一般做认证 + 粗粒度授权(如「管理员接口只有 admin 角色能访问」),细粒度授权下沉到业务服务。

五、注意事项

  • JWT 不能存敏感信息:Payload 只是 Base64 编码、任何人能解开看,别放密码等敏感数据。
  • JWT 的注销/失效问题:JWT 无状态,签发后在过期前一直有效,难以主动作废(比如用户登出、被封禁)。解决:用较短的过期时间 + Refresh Token 机制,或维护一个黑名单(登出的 Token 加黑名单,网关校验时查黑名单——但这又引入了状态)。这是 JWT 的固有权衡。
  • 密钥安全:签名密钥要妥善保管,泄露则可伪造 Token。
  • 网关与后端的信任:后端信任网关来的请求,前提是后端不直接暴露给外网(只能通过网关访问),否则有人绕过网关直接调后端就没鉴权了。

六、常见误区与追问

这道题面试时最容易丢分的地方,是把「网关统一鉴权」答成一段泛泛的组件介绍。更稳的答法是先给结论,再沿着 统一流量入口链路 拆清楚流程,最后补上异常场景、数字边界和选型取舍。

回答层次要讲清的内容容易漏掉的边界
核心定义统一鉴权把身份认证和权限校验前置到网关,后端服务只接收可信的已校验请求不要停在名词解释
流程机制请求携带 Token -> 网关解析并校验签名 -> 检查过期和权限 -> 写入用户上下文 Header -> 转发后端服务 -> 后端做业务级二次校验说明谁触发、谁存储、谁通知、谁兜底
工程取舍JWT 校验通常包括签名、过期时间、issuer、audience 和权限声明,失败直接返回 401 或 403网关适合收口横切能力,但不能把业务逻辑堆到网关,否则会形成新的复杂单体
网关统一鉴权 面试拆解:
1. 请求携带 Token
2. 网关解析并校验签名
3. 检查过期和权限
4. 写入用户上下文 Header
5. 转发后端服务
6. 后端做业务级二次校验

记忆钩子:先拆路由、过滤器、鉴权、限流、熔断、灰度,再说明网关和业务服务的边界;回答时一定要落到题目中的「网关统一鉴权」,不要把相邻中间件的能力混着讲。

  • 误区:网关鉴权后后端完全不用校验。 网关负责入口校验,关键业务仍需做资源归属和操作权限校验。
  • 误区:只解析 JWT 不验签也可以。 不验签就无法确认 Token 是否被篡改。
  • 误区:用户信息随便通过 Header 传给后端。 内网 Header 要防伪造,通常只信任来自网关的请求并清洗外部同名 Header。
  • 追问:401 和 403 怎么区分? 401 表示未认证或 Token 无效,403 表示已认证但无权限。
  • 追问:网关如何处理白名单接口? 登录、健康检查、静态资源等可配置跳过鉴权,但要严格限定路径。
  • 追问:Token 吊销怎么做? 短有效期配合刷新令牌,或维护黑名单、版本号、会话状态。

七、加强记忆

网关统一鉴权 = 把身份认证和权限校验集中到网关,请求进网关先校验、通过才转发,后端不用各自做鉴权(集中统一、后端解放、安全前置)。常用 JWT:Token 三部分(Header / Payload 存用户信息不加密 / Signature 签名防篡改),核心是无状态——服务端验签 + 查过期即可,无需查库/存 Session,适合分布式。流程:登录签发 JWT → 客户端每次带 Authorization: Bearer <JWT> → 网关全局过滤器拦截(白名单放行、其他验签+查过期,失败返 401、成功解析用户信息透传给后端)→ 后端信任网关已鉴权直接用。鉴权含认证(你是谁)+ 授权(你能做什么),网关做认证+粗粒度授权。注意:JWT 不存敏感信息、难主动作废(用短过期+Refresh 或黑名单)、后端不能绕过网关直连。口诀:网关集中验 JWT(无状态验签查过期)、透传用户信息、后端信任放行