如何使用 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
我正在将 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