如何使用 angular-signalr-hub 和 windows 身份验证调试偶发的 403 连接问题

How to debug sporadic 403 connection issues with angular-signalr-hub and windows authenitification

我正在将 signalR 与 signalr-hub 和 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 验证 returns 实际用户,然后 SignalR 注意到连接已在请求中更改并抛出错误.

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

我会尽快提供有关此问题的更多信息,与此同时,如果有任何关于如何解决\解决\调试此问题的一般性想法,我将不胜感激。

解决方法是禁用匿名身份验证。否则,如果在处理信号器请求时 SignalR 正在连接并且身份验证从匿名身份验证转换为用户身份验证,则会引发错误。

可以在 web.config 中禁用匿名身份验证,如下所示:

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

我在这里找到了这个答案:answer