Possible Bug in v8.3 with Classic Authentication Mode for Designer w/ AD Failover to Local Source

I may have stumbled upon a bug when using classic authentication mode with an Active Directory user source with soft or hard failover to a local/internal user source when the Active Directory user source is not available.

I restored a client's backup to a VM and was able to login to the gateway web interface just fine (it did take a bit for the main source to failover to the local user source, but that was expected. I was unable to login to the designer and kept getting the below error. If I changed the designer user source in classic mode to the local user source, I could login, and if I left it set to the AD user source, but changed the authentication mode to Identity Provider instead of Classic, it also worked. So it seems it's specific to that one combination.

This worked fine in v8.1, but this is on v8.3.9 and having this issue. (I haven't tried logging in with a local account in soft failover on the designer when the AD user source is available, but will be able to next week.)

com.inductiveautomation.ignition.client.gateway_interface.GatewayException: java.util.concurrent.TimeoutException: Idle timeout expired: 30013/30000 ms
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.login(GatewayInterface.java:231)
	at com.inductiveautomation.ignition.designer.DesignerGatewayConnection.loginDesigner(DesignerGatewayConnection.java:61)
	at com.inductiveautomation.ignition.designer.DesignerGatewayConnection.authChallengeLogin(DesignerGatewayConnection.java:78)
	at com.inductiveautomation.ignition.client.gateway_interface.AbstractGatewayConnection.authChallengeLogin(AbstractGatewayConnection.java:1214)
	at com.inductiveautomation.ignition.designer.ClassicDesignerSplash.doLogin(ClassicDesignerSplash.java:239)
	at com.inductiveautomation.ignition.designer.ClassicDesignerSplash.lambda$new$0(ClassicDesignerSplash.java:106)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at java.desktop/javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at java.desktop/javax.swing.AbstractButton.doClick(Unknown Source)
	at java.desktop/javax.swing.plaf.basic.BasicRootPaneUI$Actions.actionPerformed(Unknown Source)
	at java.desktop/javax.swing.SwingUtilities.notifyAction(Unknown Source)
	at java.desktop/javax.swing.JComponent.processKeyBinding(Unknown Source)
	at java.desktop/javax.swing.KeyboardManager.fireBinding(Unknown Source)
	at java.desktop/javax.swing.KeyboardManager.fireKeyboardAction(Unknown Source)
	at java.desktop/javax.swing.JComponent.processKeyBindingsForAllComponents(Unknown Source)
	at java.desktop/javax.swing.JComponent.processKeyBindings(Unknown Source)
	at java.desktop/javax.swing.JComponent.processKeyEvent(Unknown Source)
	at java.desktop/java.awt.Component.processEvent(Unknown Source)
	at java.desktop/java.awt.Container.processEvent(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
	at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
	at java.desktop/java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
	at java.desktop/java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
	at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.util.concurrent.ExecutionException: java.util.concurrent.TimeoutException: Idle timeout expired: 30013/30000 ms
	at org.eclipse.jetty.client.InputStreamResponseListener.get(InputStreamResponseListener.java:217)
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.login(GatewayInterface.java:219)
	... 49 more
Caused by: java.util.concurrent.TimeoutException: Idle timeout expired: 30013/30000 ms
	at org.eclipse.jetty.io.IdleTimeout.checkIdleTimeout(IdleTimeout.java:167)
	at org.eclipse.jetty.io.IdleTimeout.idleCheck(IdleTimeout.java:113)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)

Ignition v8.3.9 (b2026082511)
Java: Azul Systems, Inc. 17.0.19