2017-06-18 52 views
5

工作,我有一個ASP.NET MVC應用程序4(.NET 4.5)和SIgnalR一旦正常工作與基於表單的身份驗證(通過IIS/IIS託管快遞)SignalR不使用Windows集成身份驗證

我更改應用程序爲Windows集成身份驗證(<authentication mode="Windows"/>在「web.config」)它停止工作。

jquery.signalR-2.2.2.min.js:9 WebSocket連接到ws://localhost:51030/signalr/connect?transport=webSockets&blhablahblah失敗:在網頁套接字握手錯誤:意外響應代碼:403

添加[Authorize]屬性之後我的樞紐,誤差變化

WebSocket連接到ws://localhost:51030/signalr/connect?transport=webSocketsblahblah失敗:HTTP驗證失敗;未提供有效的憑證

應用程序的其它部分工作得很好,窗戶-auth的是在服務器上啓用和作品,等等,等等

如何解決這個問題?

如果由於某種原因無法解析(可能是Chrome不支持WindowsSocket,或者其他的東西) - 爲什麼不回落到非websocket協議?以及我如何強制後備?

更新:我創建了一個github問題https://github.com/SignalR/SignalR/issues/3953。問題不在於我無法連接。問題是我無法處理錯誤以回退到另一個運輸工具。 .fail().error()都不被調用。嘗試趕上也沒有幫助。

回答

6

... 10小時後...

部分解決(回答我的問題)

擺弄它後,我可以證實,該添加[Authorize]屬性來我中心(或者,將GlobalHost.HubPipeline.RequireAuthentication();添加到「Startup.cs」)實際上確實有幫助。 現在確實回退到到一個替代傳輸,即使錯誤仍然扔到瀏覽器的控制檯。

您還可以指定運輸它回落到中,通過調用:

$.connection.hub.start({ transport: ['webSockets', 'longPolling'] }); 

的情況下,你不喜歡默認的優先級(我猜,「隱藏的iframe」是默認的第二個選項)。

錯誤是由鍍鉻引起的原因

,它不支持WebSocket連接NTLM。有趣的是,IE,MS Edge和Firefox都支持它(「Chrome是最新的IE」)。

如果有人想爲Chromium開發人員添加任何輸入,那麼在這裏有一個Chromium bugtracker的開放問題https://bugs.chromium.org/p/chromium/issues/detail?id=423609