body 中发送的 OpenID 访问令牌,将其放入 header
OpenID access token sent in body, put it in the header
我有一个遗留 jax-rs 请求。我无法改变它。 body 具有 OpenID 访问令牌。我想使用 quarkus-oidc 验证它。我的想法是阅读 body 并将令牌放入 Authorization
header.
我尝试在有和没有 quarkus proactive auth 的情况下使用 ContainerRequestFilter
,但看起来 quarkus 身份验证检查发生在 jax-rs 之前,在 vert.x
的某个地方
我找到了这个 ,但只有当访问令牌在查询字符串中时它才有效。
如何在 quarkus-oidc 检查访问令牌之前读取请求 body 并在 header 秒中写入访问令牌?
我修好了!不确定这是否是做我想做的最正确的方法,但看起来它工作可靠。
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();
}
}
我有一个遗留 jax-rs 请求。我无法改变它。 body 具有 OpenID 访问令牌。我想使用 quarkus-oidc 验证它。我的想法是阅读 body 并将令牌放入 Authorization
header.
我尝试在有和没有 quarkus proactive auth 的情况下使用 ContainerRequestFilter
,但看起来 quarkus 身份验证检查发生在 jax-rs 之前,在 vert.x
我找到了这个
如何在 quarkus-oidc 检查访问令牌之前读取请求 body 并在 header 秒中写入访问令牌?
我修好了!不确定这是否是做我想做的最正确的方法,但看起来它工作可靠。
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();
}
}