2017-06-18 53 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