令牌校验(JWT)
令牌校验:在节点上用你的身份提供方公钥校验请求里的 JWT,并按令牌里的声明放行或拦截。
作用
节点用你登记的公钥校验请求带的 JWT:检查签名、过期时间、签发方和受众,再按令牌里的声明(如角色)决定放行还是拦截。校验在边缘完成,不必每个请求都回到你的认证服务。
使用场景
- API 或后台只允许带有效登录令牌的请求访问。
- 令牌里的
role为admin才能访问管理路径。 - 对接 Keycloak、Auth0、Azure AD 等身份提供方,使用它们公开的 JWKS 地址。
在哪里配置
两步:
- 控制台菜单“令牌校验”,添加“密钥集”,登记公钥和校验要求。
- 安全策略的 WAF 规则里,条件字段选“JWT 令牌”(有效或无效/缺失)和“JWT 声明”,选择刚才的密钥集,动作按需要设为拦截或放行。
配置项
密钥集
| 配置项 | 默认值 | 说明 |
|---|---|---|
| 名称、描述 | 无 | 名称在账号内唯一 |
| 公钥来源 | 无 | “从地址拉取 JWKS”或“直接粘贴 JWKS”;创建后不能改来源 |
| JWKS 地址 | 无 | 来源为地址时填写,只接受 https 的公网地址,由主控拉取 |
| 刷新间隔 | 1 小时 | 5 分钟、15 分钟、1 小时、6 小时、1 天 |
| JWKS 内容 | 无 | 来源为粘贴时填写,只放公钥 |
| 允许的算法 | 无 | RS256、ES256、EdDSA |
| 令牌位置 | 无 | 最多 4 个,按顺序取第一个找到的:Authorization: Bearer、请求头、Cookie、查询参数 |
| 签发方 iss | 空 | 留空不检查 |
| 受众 aud | 空 | 可填多个,留空不检查 |
| 必须有过期时间 | 开 | 令牌缺少 exp 时判为无效 |
| 时钟容差 | 60 秒 | 校验过期与生效时间时允许的偏差 |
| 校验失败时的响应 | 403 | 可选 403 拦截页,或 401 并带 WWW-Authenticate: Bearer |
每个账号最多 50 份密钥集。远程来源创建时会拉取一次,之后按刷新间隔更新;拉取失败时继续使用上一次的公钥,连续失败会发通知。“立即刷新”每分钟最多一次。
规则条件
| 字段 | 操作符 | 说明 |
|---|---|---|
| JWT 令牌 | 有效、无效或缺失 | 值是密钥集 |
| JWT 声明 | 等于、在其中、包含、存在、数值不小于、数值不大于 | 声明路径用点分隔,如 roles 或 user.level |
一条规则里 JWT 令牌条件最多 1 个,声明条件最多 4 个;用了声明条件必须同时有“JWT 令牌有效”条件。
常见问题
怎么验证配置对不对
密钥集列表里点“试一下”,粘贴一个令牌,页面显示是否有效、失败原因、令牌头部和声明。令牌只在本次请求里解析,不保存也不写日志。
常见的失败原因
没有令牌、格式不对、算法不在允许列表、找不到对应的公钥(kid)、签名不对、已过期、缺少 exp、尚未生效、签发方不符、受众不符。
密钥集显示“拉取失败”
列表会写明原因,例如域名解析失败、地址指向内网、证书校验失败、响应不是合法的 JWK Set。私有网络里的身份提供方请改用“直接粘贴 JWKS”。
能用 HS256 吗
不支持对称算法。
平台管理员账号看不到“令牌校验”
这个菜单面向租户账号。