API网关的核心功能主要包括请求路由(A)、身份认证与鉴权(B)、流量控制(限流)与服务容错(熔断)(D)等,用于统一管理、保护和治理后端微服务。
C. 代码编译 ——不属于API网关的功能。代码编译是开发阶段由编译器或构建工具(如 Maven、Gradle、Go build、tsc 等)完成的静态过程,API网关运行在运行时(Runtime),不参与源码解析或编译,仅处理 HTTP/HTTPS 请求的转发与策略控制。
因此,正确答案是:C. 代码编译
API网关实现JWT(JSON Web Token)身份鉴权,是其核心安全功能之一,通常在请求进入后端服务前完成校验,避免将未授权请求透传。其验证流程如下(以典型网关如 Kong、Spring Cloud Gateway、Apigee 或自研网关为例):
✅完整JWT鉴权流程:
接收请求
客户端在 HTTP 请求头中携带Authorization: Bearer <JWT>(或自定义 Header,如X-Auth-Token)。提取Token
网关从请求头中解析并提取 JWT 字符串(形如xxxxx.yyyyy.zzzzz)。基础格式校验
- 检查是否为三段式(Header.Payload.Signature),用
.分隔; - Base64Url 解码 Header 和 Payload,验证 JSON 结构有效性;
- 拒绝格式错误、缺少签名段或含非法字符的 Token。
- 检查是否为三段式(Header.Payload.Signature),用
签名验证(关键步骤)
- 读取网关预配置的密钥(对称密钥
HS256)或公钥(非对称RS256/ES256); - 使用对应算法重新计算签名,并与 Token 中 Signature 段比对;
- 签名不匹配 → 拒绝请求(401 Unauthorized)。
- 读取网关预配置的密钥(对称密钥
载荷(Payload)业务校验
- 检查标准声明(claims):
exp(过期时间)→ 防止使用过期 Token;nbf(生效时间)→ 防止提前使用;iat(签发时间)→ 可选校验时序合理性;iss(签发者)、aud(受众)→ 确保 Token 由可信认证服务签发且面向本系统;
- 校验自定义声明(如
roles,tenant_id,permissions)→ 支持细粒度 RBAC/ABAC 授权(如网关根据roles: ["admin"]决定是否放行/admin/**路径)。
- 检查标准声明(claims):
(可选)黑名单/状态检查
- 查询 Redis 等缓存,确认该 JWT 是否已被主动注销(如登出)或列入黑名单(需配合 JWT 黑名单机制或短生命周期+刷新令牌策略)。
鉴权通过 → 注入上下文 & 转发
- 将解析后的用户身份信息(如
user_id,roles)注入请求头(如X-User-ID,X-Roles)或网关上下文; - 透传至后端服务,供其做二次鉴权或个性化处理;
- 执行路由转发。
- 将解析后的用户身份信息(如
⚠️ 注意:
- 网关不生成 JWT(由独立认证服务如 Auth0、Keycloak、Oauth2 授权服务器签发);
- 网关不存储用户密码或会话状态,符合无状态设计原则;
- 生产环境推荐使用 RS256 + 公钥验签,避免密钥泄露风险。
客户端 → [Auth Server 获取 JWT] ↓ 客户端 → [API网关] → 验证签名/时效/声明 → ✅ → 添加身份头 → 转发至后端服务 ↓ ❌ 401/403 响应