• 网关鉴权组件


    组件编码 hzero-gateway-helper-api

    组件编码 hzero-gateway-helper-default

    简介

    黑名单和白名单

    hzero:
      filter:
        # 白名单配置
        white-list:
          # 是否启用,默认不启用
          enable: true
          # 匹配规则
          ip:
            - 172.10,11.0-100.*
            - 192.10,11.0-100.*
        # 白名单配置
        black-list:
          # 是否启用,默认不启用
          enable: true
          # 匹配规则
          ip:
            - 172.10,11.0-100.*
            - 192.10,11.0-100.*
    

    GatewayHelper 鉴权

    鉴权过滤器

    GatewayHelper 组件提供了一组过滤器来对API及用户鉴权,具体可参考 基础服务调用链路

    自定义鉴权

    /**
     * 自定义鉴权过滤器,实现 org.hzero.gateway.helper.api.HelperFilter 接口
     */
    @Component
    public class CustomFilter implements HelperFilter {
    
    
        public CustomFilter() {
    
        }
    
        /**
         * 指定过滤器顺序,可在标准过滤器之前执行,数字越小,优先级越高
         */
        @Override
        public int filterOrder() {
            return 50;
        }
    
        /**
         * 是否执行此过滤器,false 则跳过此过滤器
         */
        @Override
        public boolean shouldFilter(RequestContext context) {
            return true;
        }
    
        /**
         * 具体的鉴权逻辑,返回 true,则鉴权通过,返回 false,则鉴权不通过
         *
         * @param context RequestContext 包含了API请求相关的所有信息
         */
        @Override
        public boolean run(RequestContext context) {
            if (true) {
                context.response.setStatus(CheckState.SUCCESS_PASS_SITE);
                context.response.setMessage("Have access to this api.");
                return true;
            } else {
                context.response.setStatus(CheckState.PERMISSION_NOT_PASS);
                context.response.setMessage("No access to this api.");
                return false;
            }
        }
    }
    

    签名API

    GatewayHelper 支持签名方式对API鉴权,调用方通过提供的算法生成签名,网关验证签名通过后,即可访问API。需注意的是,签名API与公开API类似,无法获取用户信息。

    启用签名鉴权

    hzero:
      gateway:
        helper:
          ## 启用API签名
          signature:
            enabled: false
            secrets:
              - secretId: hzero
                secretKey: xxxxxxxxxxxxxx
              - secretId: srm
                secretKey: xxxxxxxxxxxxxxxx
    

    客户端签名

    /**
     * 根据参数等信息获取签名
     *
     * @param params 请求参数
     * @param method 请求方法,支持 HttpMethod#POST、HttpMethod#GET、HttpMethod#DELETE、HttpMethod#PUT
     * @param secretId 密钥Id
     * @param secretKey 签名密钥
     * @return 签名
     */
    public static String buildSignature(Map<String, Object> params, HttpMethod method, String secretId, String secretKey) {
           // ...
    }
    

    定制化签名

    如果标准的签名方式或算法不满足需求,可在gateway服务中定制签名认证。