vertx-web
vertx-web copied to clipboard
Web ReverseProxy fails after authentication with OAuth2 callback
Questions
Version
4.5.10
Context
I encountered an exception which looks suspicious while .
I setup OAuth2 and then tried to proxy. Everything looks okay but then the proxied request failed after a time out. Commenting out all the OAuth2 code and it works fine as a reverse proxy.
Do you have a reproducer?
v = Vertx.vertx();
HttpClient proxyClient = v.createHttpClient();
HttpProxy httpProxy = HttpProxy.reverseProxy(proxyClient);
Router proxyRouter = Router.router(v);
HttpServer proxyServer = v.createHttpServer();
OAuth2Auth authProvider = AzureADAuth.create(v, "CLIENT_ID", "CLIENT_SECRET", "TENANT");
OAuth2AuthHandler oauth2 = OAuth2AuthHandler.create(v, authProvider, "http://localhost:8201/callback/");
oauth2.setupCallback(proxyRouter.route("/callback/"));
proxyRouter.route().handler(ctx -> {
System.out.println("Global handler: Request path = " + ctx.request().path());
ctx.next(); // Pass request to the next handler in the chain
});
proxyRouter.route("/*").handler(oauth2);
proxyRouter.route("/*").handler(ctx-> {
if (ctx.user() == null) {
System.out.println("OAuth2 Auth handler triggered for path: " + ctx.request().path());
oauth2.handle(ctx);
} else {
System.out.println("User authenticated: " + ctx.user().principal());
ctx.next();
}
});
proxyRouter.route(HttpMethod.GET, "/*").handler(ProxyHandler.create(httpProxy, 8200, "localhost"));
proxyServer.requestHandler(proxyRouter).listen(8201);
Steps to reproduce
- Create an app registration in Azure AD
- Create any webserver as an Origin for the reverse proxy to hit on port 8200
- Spin up the above code and http http://localhost:8201 (proxy server address).
- Login with Azure Oauth 2 creds
- Callback is called, but then the proxy handler timesout.
- Comment out all the OAuth2 code and the reverse proxy works fine!
Extra
I am using Windows 11 H2. Not sure if there is any weirdness with DNS.