You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Krakend中保护内部路由免受外部访问?

解决Krakend下微服务内部授权引发的请求量过大问题

核心优化方向

减少内部授权请求的重复发起,从网关层统一处理授权逻辑,避免下游微服务各自触发授权校验。


具体实现方案

  • 启用授权结果缓存
    将授权服务的验证结果在Krakend网关层缓存,复用同一令牌的校验结果,无需每次调用都发起授权请求。配置示例:

    {
      "endpoint": "/api/internal/**",
      "extra_config": {
        "github.com/devopsfaith/krakend-cache": {
          "cache": true,
          "ttl": 1800, // 缓存时长建议设为令牌有效期的1/2
          "key": "Authorization" // 以请求头中的授权令牌作为缓存键
        }
      }
    }
    

    注意缓存TTL不要超过令牌本身的有效期,避免缓存失效令牌的验证结果。

  • 网关层统一授权,下游免校验
    在Krakend网关完成一次授权验证后,将合法的授权上下文(如用户ID、权限组)通过请求头传递给下游微服务,关闭下游服务的独立授权校验逻辑。配置示例:

    {
      "endpoint": "/api/order",
      "backend": [
        {
          "url_pattern": "/internal/order",
          "extra_config": {
            "github.com/devopsfaith/krakend-headers": {
              "request": {
                "headers_to_pass": ["X-User-ID", "X-Permissions"]
              }
            }
          }
        }
      ],
      "extra_config": {
        "github.com/devopsfaith/krakend-jose": {
          "alg": "RS256",
          "jwk_url": "http://auth-service/jwks",
          "token_from": "header:Authorization",
          "claims_to_headers": {
            "sub": "X-User-ID",
            "permissions": "X-Permissions"
          }
        }
      }
    }
    

    此方案直接在网关解析JWT并提取权限信息,下游服务只需校验请求头即可,完全省去内部授权请求。

  • 本地解析自包含令牌
    如果使用JWT、PASETO等自包含令牌,无需调用授权服务,直接在Krakend网关本地验证令牌签名与有效期。通过krakend-jose插件实现,若密钥固定可关闭远程JWKS刷新,进一步减少请求。

  • 批量授权校验
    若必须调用授权服务,通过Krakend的批量请求插件,将短时间内的多个授权请求合并为一次批量调用,降低请求频次。可结合github.com/devopsfaith/krakend-batch插件配置批量规则。


内容的提问来源于stack exchange,提问作者Лёша Павлов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 16:15:09