如何调试零星的403连接问题与角信号集线器和windows身份验证



我正在使用signalR与signalhub和windows身份验证ASP.net Web Api项目。

我在我的项目中创建了两个中心,它们都订阅了stateChanged和errorHandler侦听器。有时,页面加载没有问题,但有时会抛出403连接问题。错误信息如下:

Error: No transport could be initialized successfully. Try specifying a different transport or none at all for auto initialization.

有时后面跟着错误消息:

Error: Error during start request. Stopping the connection.
responseText: "Unrecognized user identity.  The user identity cannot change during an active SignalR connection."

我认为这个错误是由windows身份验证的竞争条件引起的。当浏览器首次加载时,默认连接是匿名的,然后signalR开始连接,然后windows auth返回实际用户,然后signalR注意到连接在请求中发生了变化并抛出错误。

到目前为止,我已经尝试使用$timeout来延迟与signalR的连接,以等待Windows Auth,但这似乎只会产生更频繁的错误。

我将尽快提供有关此问题的更多信息,同时,我将感谢如何解决绕过调试此问题的任何一般想法。

解决方案是禁用匿名身份验证。否则,如果SignalR正在连接并且身份验证从匿名转换到用户身份验证,而SignalR请求正在处理,则抛出错误。

web可以禁用匿名认证。配置如下:

 <system.web>
    <authentication mode="Windows" />
    <authorization>
      <deny users="?" />
    </authorization>
    ...

最新更新