惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
V
V2EX
Engineering at Meta
Engineering at Meta
美团技术团队
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 司徒正美
I
InfoQ
S
SegmentFault 最新的问题
博客园 - 叶小钗
N
Netflix TechBlog - Medium
Y
Y Combinator Blog
IT之家
IT之家
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
T
The Blog of Author Tim Ferriss
月光博客
月光博客
The Cloudflare Blog
U
Unit 42
GbyAI
GbyAI
L
LangChain Blog
Microsoft Azure Blog
Microsoft Azure Blog

博客园 - 张占岭

keycloak~通过用户ID直接置换token keycloak~缓存对象的介绍与作用 wso2-apim-mcp2改版分析 mcp1和mcp2对比 为什么前端项目使用ts比js要多了 多个IDP的用户联合方案的分析 apisix~response-rewrite响应头重写 springboot~关于构造方法注入和字段注入的选择 apisix~OpenResty各阶段的介绍 keycloak~aud受众字段的作用及如何生成 wso2~关于workbuddy中mcp在wso2中的授权端点 k8s~避免调度资源碎片化 WEB安全~csrf介绍 WEB安全~DPoP的介绍 WEB安全~csp的介绍 什么是中间人攻击 WEB安全~xss的介绍 k8s~pod资源限制和JVM的XMX配置 关于对wso2和keycloak的token交换的调研 keycloak~实现OAuth 2.0 Token Exchange backstage~实体的介绍及它们的关系 backstage~openapi的接入与protobuf的对比 backstage~将java服务添加到backstage backstage~对接github和gitlab backstage~开始一个backstage应用 apisix~graphQL的支持 wso2几个核心项目介绍 docker~BuildKit的介绍 k8s~secret资源的使用 算法~时间戳计算两个日期是否为同天同时同分
apisix~forward-auth外部认证
张占岭 · 2026-08-04 · via 博客园 - 张占岭

针对你这个"使用外部鉴权接口 http://user.service/check 来校验请求头 Authorization" 的需求,最匹配的插件是 forward-auth

推荐方案:forward-auth 插件

forward-auth 插件实现的就是"经典外部认证"模型。它会将客户端的请求转发给你指定的外部鉴权服务,然后根据该服务的响应来决定是否放行请求,非常适合你已经有独立鉴权服务的场景。

它的工作流程和配置要点如下:

  1. 转发请求:当请求到达配置了该插件的路由时,APISIX 会阻塞原始请求,并向你的鉴权服务 http://user.service/check 发起一个 HTTP 调用。
  2. 携带凭证:通过配置 request_headers 属性,你可以明确指定将客户端的 Authorization 请求头转发给鉴权服务。
  3. 决定放行
    • 鉴权通过:如果你的 check 服务返回 2xx 状态码,APISIX 会认为请求合法,并将原始请求继续转发给上游后端服务。
    • 鉴权失败:如果 check 服务返回 非 2xx 状态码(如 401/403),APISIX 会拦截请求,并直接将鉴权服务的错误响应(或配置后的自定义信息)返回给客户端,不会将请求转发到上游。

核心配置示例

你可以通过 Admin API 或 Dashboard 在路由上启用该插件,一个核心配置示例如下:

{
  "plugins": {
    "forward-auth": {
      "uri": "http://user.service/check",
      "request_headers": ["Authorization"] 
    }
  },
  "upstream": {
    "nodes": {
      "your_real_upstream_host:port": 1
    }
  }
}

其他备选方案简述

除了 forward-auth,APISIX 还有其他相关插件,但它们并非你的场景下的最优解:

  • openid-connect:如果 check 接口遵循标准的 OIDC 协议,这个插件是更合适的选择,它支持自省等标准流程。但如果 check 接口是自定义协议,使用 forward-auth 灵活性更高。
  • basic-auth / key-auth:这类插件是 APISIX 内置的认证方案,需要将用户凭证(用户名/密码或 Key)预先配置在 APISIX 的 Consumer 对象中,由 APISIX 自己完成校验,而不是转发给外部服务。

如果你想进一步确认 forward-auth 的配置细节,比如如何将鉴权服务返回的特定头信息(如 X-User-ID)传递给上游服务,我可以再为你展开说明。

将请求头内容改个名传递到上游

  • 客户端 → APISIX:使用 Authorization: Bearer xxx
  • APISIX → B服务(鉴权):转换成 X-API-Key: xxx(去掉 Bearer 前缀)
 "forward-auth": {
      "_meta": {
        "disable": false
      },
      "request_headers": [
        "X-API-Key"
      ],
      "uri": "http://youservice.ns:8080/internal/mcp/auth"
    },
"serverless-pre-function": {
  "functions": [
    "return function(conf, ctx) local auth_header = ngx.var.http_authorization; if auth_header then local _, _, token = string.find(auth_header, '^%s*[Bb]earer%s+(.+)$'); if token then ngx.req.set_header('X-API-Key', token); end; end; end"
  ],
  "phase": "rewrite"
}