概述 - 目标:在网关层验证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验证与权限策略可统一安全边界并简化服务实现,配合声明映射与监控保障合规与可追溯。

发表评论 取消回复