概述

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


点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部