What to do if getting the following error for a JWT connection with a Qlik SaaS App: The remote server returned an error: (401) Unauthorized.

What to do if getting the following error for a JWT connection with a Qlik SaaS App: The remote server returned an error: (401) Unauthorized.

FIRST CREATED ON 27 Aug 2025  I  AUTHOR Emma Camacho

Issue

If getting the following error WebSocketException: Unable to connect to the remote server
* in one M&D server
* but it works in another M&D server with exactly the same credentials (API key and JWT credentials)

STACK TRACE

WebSocketException: Unable to connect to the remote server
at MailAndDeploy.Server.ExtensionMethods.Await(Task pTask, TimeSpan pTimeout)
at MailAndDeploy.Server.Json.Rpc.JsonRpcConnection..ctor(Uri pUri, JsonRpcCookie[] pCookies, JsonRpcHeader[] pHeaders)
at MailAndDeploy.Server.Connectors.QlikSense.QsSaasConnector.EstablishRpcConnection(Uri pUri, JsonRpcCookie[] pCookies, JsonRpcHeader[] pHeaders)
at MailAndDeploy.Server.Connectors.QlikSense.QsSaasConnector.EstablishRpcConnection(String pAppId, String& pEngineSessionId)
at MailAndDeploy.Server.Connectors.QlikSense.Model.QsApp.EstablishRpcConnection()
at MailAndDeploy.Server.Connectors.QlikSense.Model.QsApp..ctor(QsConnector pConnector, String pAppId)
at MailAndDeploy.Server.Connectors.QlikSense.QsConnector.OpenApp(QlikSenseAppDatasource pDatasource, UserIdentity pIdentity)
at MailAndDeploy.Server.Persistency.Entities.Datasource.RebuildCache()
at MailAndDeploy.Server.Services.Management.Ui.DatasourcesSheet.ListPage_EntitiesTable_CellButtonClicked(String pSender, String pData)
WebException: The remote server returned an error: (401) Unauthorized.
at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Net.WebSockets.ClientWebSocket.d__21.MoveNext()


Resolution

Make sure the time in the machine is correct and the Last successful time synchronization is up-to-date as there are 2 parameters containing timestamps (expiration and not before) that depend on the correct machine's time.



Looking for Additional Guidance?


If you require more detailed information or further assistance, please visit our comprehensive Online Documentation. Our resources are designed to help you navigate all features and functionalities effectively.