首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenID访问令牌在body中发送,放在header中

OpenID访问令牌在body中发送,放在header中
EN

Stack Overflow用户
提问于 2021-08-31 12:30:03
回答 1查看 52关注 0票数 0

我有一个遗留的jax-rs请求。我不能改变它。它的主体有OpenID访问令牌。我想使用quarkus-oidc来验证它。我的想法是读取正文并将token放到Authorization头中。

我尝试使用带有和不带有quarkus proactive authContainerRequestFilter,但是看起来quarkus身份验证检查发生在jax-rs之前,在vert.x中的某个地方。

我找到了这个Quarkus Custom authorization interceptors,但它只有在访问令牌在查询字符串中时才有效。

在quarkus-oidc检查访问令牌之前,如何读取请求body和写入头部中的访问令牌?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-01 12:03:29

我修好了!不确定这是否是我想要的最正确的方式,但看起来它工作可靠。

代码语言:javascript
复制
import io.quarkus.vertx.web.RouteFilter;
import io.vertx.core.http.HttpMethod;
import io.vertx.ext.web.RoutingContext;
import io.vertx.ext.web.handler.BodyHandler;

public class JoinServerRequestSecurityRouterFilter {
    @RouteFilter(3000)
    public void extractBody(RoutingContext context) {
        if (context.request().method() != HttpMethod.POST) {
            context.next();
            return;
        }

        if (!"/session-service/join".equals(context.normalizedPath())) {
            context.next();
            return;
        }
        BodyHandler bodyHandler = BodyHandler.create(false);
        bodyHandler.handle(context);
    }
    @RouteFilter(3000 - 1)
    public void copyAccessToken(RoutingContext context) {
        if (context.request().method() != HttpMethod.POST) {
            context.next();
            return;
        }

        if (!"/session-service/join".equals(context.normalizedPath())) {
            context.next();
            return;
        }

        if (context.getBodyAsJson() == null) {
            context.next();
            return;
        }
        String accessToken = context.getBodyAsJson().getString("accessToken");
        context.request().headers().add("Authorization", "Bearer " + accessToken);
        context.next();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68998696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档