Dobra, tu jest problem:
Credential credential =
new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
Według dokumentacji: Constructor that starts the server on LOCALHOST and an unused port.
Czyli ten port może być praktycznie dowolny i pewnie dlatego się wywala, bo jako redirect_uri ustawia coś innego niż masz w konfiguracji.
Ten obiekt można zbudować przez buildera, więc takie coś powinno zadziałać.
Credential credential =
new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver.Builder().setPort(8080).build()).authorize("user");