在Fiber中启用KeyAuth需手动集成中间件并严格匹配凭证提取路径,否则请求直接被拒;默认从Header读取X-Api-Key,若字段不同须显式配置Extractor(如FromHeader("apikey")),支持Header/Query/Form多位置fallback提取;验证函数需注入Validator字段,耗时应低于5ms,失败时可通过ErrorHandler自定义JSON响应。

在Fiber应用中为特定接口启用KeyAuth密钥校验,需手动集成中间件并确保凭证提取路径与业务逻辑严格匹配,否则请求将直接被拒绝而不会进入业务Handler。
引入KeyAuth中间件并注册
在main.go或路由初始化文件中,导入github.com/gofiber/fiber/v3/middleware/keyauth包,调用fiber.KeyAuth()创建中间件实例。
这一步操作起来很简单,直接把中间件传给app.Use()或app.Get()等方法即可,但注意它必须放在业务路由注册之前,否则不生效。
KeyAuth中间件默认从Header中读取X-Api-Key字段,若你的客户端实际发送的是apikey或token字段,必须显式配置extractor参数,否则永远拿不到密钥值。
自定义密钥提取方式
方法一:从请求头提取指定字段
使用fiber.KeyAuth(fiber.KeyAuthConfig{Extractor: keyauth.FromHeader("apikey")}),强制从apikey请求头读取密钥值。注意大小写敏感,【apikey不能写成ApiKey或APIKEY】。
方法二:从查询参数提取
调用fiber.KeyAuth(fiber.KeyAuthConfig{Extractor: keyauth.FromQuery("key")}),适配GET接口带?key=xxx的调试场景。这种模式不推荐用于生产环境,因密钥会暴露在访问日志和代理记录中。
方法三:支持多位置 fallback 提取
组合使用keyauth.Extractors,例如[]keyauth.Extractor{keyauth.FromHeader("X-Api-Key"), keyauth.FromQuery("api_key"), keyauth.FromForm("api_key")}。只要任一位置存在有效密钥即通过校验,但要注意表单提取仅对application/x-www-form-urlencoded和multipart/form-data请求生效。
实现密钥验证逻辑
第一步:定义验证函数
编写func(c fiber.Ctx) bool函数,内部根据c.Get("X-Api-Key")或对应字段值查数据库、配置文件或内存Map。返回true表示密钥合法,false则触发401响应。
第二步:注入验证器
将该函数赋值给KeyAuthConfig.Validator字段,例如fiber.KeyAuth(fiber.KeyAuthConfig{Validator: myValidator})。此函数会在每次请求时同步执行,务必保证其耗时低于5ms,否则成为性能瓶颈。
第三步:处理校验失败
默认情况下,验证失败返回401 Unauthorized。如需返回JSON格式错误信息,需设置KeyAuthConfig.ErrorHandler字段,例如返回{"code":401,"msg":"invalid api key"}。不设置则使用中间件内置文本响应,前端解析困难。


















