概述
- 目标:在网关层验证JWT签名与声明,并基于角色或范围实施访问控制,统一安全边界。
- 适用:面向外部或内部的REST/gRPC服务入口。
核心与实战
- Kong(JWT插件与ACL示例):
plugins:
- name: jwt
config:
key_claim_name: iss
secret_is_base64: false
claims_to_verify: [exp]
- name: acl
config:
allow: ["role-admin", "role-user"]
- Envoy JWT验证与路由:
http_filters:
- name: envoy.filters.http.jwt_authn
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.jwt_authn.v3.JwtAuthentication
providers:
idp:
issuer: https://idp.example.com/
remote_jwks:
http_uri:
uri: https://idp.example.com/keys
cluster: idp
timeout: 3s
forward: true
rules:
- match: { prefix: "/admin" }
requires:
requires_any:
requirements:
- provider_name: idp
- allow_missing: {}
- APISIX(jwt-auth与consumer):
{
"uri": "/admin/*",
"plugins": {
"jwt-auth": {},
"key-auth": {}
},
"upstream": {"type": "roundrobin", "nodes": {"api:8080": 1}}
}
示例
- 头部检查与声明映射:
-- 将`X-User-Id`与`X-Scopes`从JWT声明映射至上游用于细粒度鉴权
- 过期与拒绝:
-- 验证`exp`与`nbf`;返回401并附带`WWW-Authenticate`头说明
验证与监控
- 验证来源:
- 使用远程JWKs验证签名,校验`iss/aud`与`kid`选择公钥。
- 访问控制:
- 统计不同角色或范围命中率与拒绝率,监控安全事件。
- 头与日志:
- 检查转发头是否正确映射;记录拒绝原因与请求上下文。
常见误区
- 未校验发行者与受众导致任意令牌通过;必须严格校验。
- 过度在应用层重复鉴权造成耦合;边界鉴权与应用鉴权需职责清晰。
- 没有滚动JWKs导致密钥变更时服务不可用;需定期刷新与容错。
结语
- 在网关层进行JWT验证与权限策略可统一安全边界并简化服务实现,配合声明映射与监控保障合规与可追溯。

发表评论 取消回复