vert.x - 正文中发送的 OpenID 访问令牌,放在标头中
问题描述
我有一个遗留的 jax-rs 请求。我无法改变它。它的主体具有 OpenID 访问令牌。我想使用 quarkus-oidc 对其进行验证。我的想法是阅读正文并将令牌放入Authorization
标题。
我尝试使用ContainerRequestFilter
和不使用quarkus 主动身份验证,但看起来 quarkus 身份验证检查发生在 jax-rs 之前,在 vert.x 的某个地方
我找到了这个Quarkus 自定义授权拦截器,但它仅在访问令牌位于查询字符串中时才有效。
如何在 quarkus-oidc 检查访问令牌之前读取请求正文并在标头中写入访问令牌?
解决方案
我解决了!不确定这是否是做我想做的最正确的方法,但看起来它工作可靠。
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();
}
}
推荐阅读
- python - 如何解决 python 3.6 中的列表问题?
- java - 通过 Java 以无头模式运行 Appium
- azure - 使用 ARM 模板成功创建 Azure 日志警报规则,但未显示在门户中
- pine-script - 是否可以用一个脚本交易多种资产?
- windows - BitBlt - 使用另一个应用程序的 HDC 时,捕获的像素全为零 (bgra)
- python - 我无法在 Pepper 上安装 SpeechRecognition 模块
- css - 圆角的超链接不是真正的圆角
- java - JavaFX - 需要一个 for 循环来暂停并等待按钮输入
- ios - 激活物理体时节点未连接到平面
- c++ - 在 C++ 的头文件中使用全局变量“extern”的编译器错误