You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在quarkus-oidc校验前将请求体中的OpenID token写入Authorization头

解决方案

核心思路

Quarkus OIDC的校验逻辑确实在Vert.x HTTP层执行,早于JAX-RS的ContainerRequestFilter执行时机,所以你需要在Vert.x路由层实现过滤器,将优先级设置为高于OIDC认证过滤器,即可在校验前完成token提取和请求头写入。

实现步骤

1. 实现Vert.x路由过滤器

使用Quarkus提供的@RouteFilter注解注册全局路由过滤器,设置足够高的优先级(数字越小优先级越高,OIDC默认优先级为1000,设置为10即可确保先执行),参考代码如下:

import io.quarkus.vertx.http.filters.RouteFilter;
import io.vertx.core.http.HttpServerRequest;
import io.vertx.ext.web.RoutingContext;
import io.vertx.core.json.JsonObject;
import javax.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class TokenExtractFilter {

    @RouteFilter(10)
    void extractTokenFromBody(RoutingContext rc) {
        HttpServerRequest request = rc.request();
        
        // 仅对目标legacy接口执行逻辑,避免全量接口无意义开销
        if (!"/your-legacy-endpoint".equals(request.path())) {
            rc.next();
            return;
        }

        // 读取请求体,Quarkus会自动缓存body,后续JAX-RS端点可正常读取
        rc.body().onSuccess(buffer -> {
            try {
                JsonObject bodyJson = buffer.toJsonObject();
                // 替换为实际请求体中存储access token的字段名
                String accessToken = bodyJson.getString("access_token");
                if (accessToken != null && !accessToken.isBlank()) {
                    // 写入Authorization请求头,适配OIDC校验规则
                    request.headers().set("Authorization", "Bearer " + accessToken);
                }
            } catch (Exception e) {
                // 解析失败直接走后续流程,OIDC会自动返回401状态码
            } finally {
                // 继续执行后续逻辑,包括OIDC认证校验
                rc.next();
            }
        }).onFailure(err -> rc.next());
    }
}

2. 适配调整

  • 如果你的请求体是form表单格式而非JSON,自行调整解析逻辑提取token字段即可
  • 若请求体大小超过默认限制,可配置quarkus.http.limits.max-body-size参数调整阈值
  • 无需关闭proactive authentication,当前过滤器执行优先级足够早,可在OIDC校验前完成头注入

内容的提问来源于stack exchange,提问作者trusteduser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:54:03