# 概述
通过网关暴露的接口,必须配置路由。
权限校验是对请求接口的客户端的认证,确认其能否访问接口。
客户端可通过 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 的认证方式,校验请求。