# 概述

通过网关暴露的接口,必须配置路由。

权限校验是对请求接口的客户端的认证,确认其能否访问接口。

客户端可通过 fizz-appid 请求头表明身份,即表明自身是什么应用。

管理后台可配置应用的认证方式,当前支持 md5、密钥、自定义 3 种方式。

路由可关联应用,即对访问接口的客户端认证。

下面以 “路由-反向代理” 的例子为基础,介绍应用的定义及 3 种认证方式。

# 应用定义

管理后台定义应用 client-app-1:

# 配置认证

# 密钥认证

上面的配置:网关对请求头 fizz-appid=client-app-1 的客户端,会检验 fizz-sign 请求头是否为图中的密钥。

# md5认证

上面的配置:网关 MD5【client-app-1 + fizz-ts(时间戳,毫秒) + 95c6990e07714a63aba8354fa6544701】,检查前值是否与客户端传递的 fizz-sign 一致。

# 自定义

认证方式选 “自定义插件”,在网关代码中继承 AbstractCustomAuth.java,并实现

public abstract Mono<Result<?>> auth(String appId, String ip, String timestamp, String sign, App fizzAppConfig, ServerWebExchange exchange);
// appId: client-app-1
// ip: 客户端 ip
// timestamp: fizz-ts
// sign: fizz-sign
// fizzAppConfig: 应用配置

实现类标注为 @Component,网关需重启,如:

@Component
public class MyAuth extends AbstractCustomAuth {

    @Override
    public Mono<Result<?>> auth(String appId, String ip, String timestamp, String sign, App fizzAppConfig, ServerWebExchange exchange) {
        if (fizzAppConfig.secretkey.equals(sign)) {
            return Mono.just(Result.succ()); // 认证通过
        }
        return Mono.just(Result.fail("密钥不对")); // 响应客户端 "密钥不对"
    }
}

# 路由配置

在 “路由-反向代理” 的例子上:

选择 client-app-1 保存后:

这样配置后:只有 client-app-1 客户端能访问 aservice/a/b,同时网关会根据 client-app-1 的认证方式,校验请求。