Signalr Silverlight客户端持续连接的信号器身份验证

Signalr Silverlight客户端持续连接的信号器身份验证,signalr,signalr.client,Signalr,Signalr.client,从0.4.0左右的定制版本升级,我发现身份验证不再有效 我有一个RIA服务应用程序,带有表单身份验证(基于stock AuthenticationBase)和HttpContext.Current,可从用于携带用户身份的PersistentConnection处理程序访问。在IIS日志中,我看到身份仍然与RIA请求一起传递 升级到最新的SignalR时,我发现该标识在HttpContext或传入的IRequest中都不可用。从Fiddler日志中,请求被403拒绝,并且不会发送凭据 将Conne

从0.4.0左右的定制版本升级,我发现身份验证不再有效

我有一个RIA服务应用程序,带有表单身份验证(基于stock AuthenticationBase)和HttpContext.Current,可从用于携带用户身份的PersistentConnection处理程序访问。在IIS日志中,我看到身份仍然与RIA请求一起传递

升级到最新的SignalR时,我发现该标识在HttpContext或传入的IRequest中都不可用。从Fiddler日志中,请求被403拒绝,并且不会发送凭据

将Connection.Credentials设置为new NetworkCredentials()不会更改任何内容

查看源代码和完全不充分的代码并没有产生任何见解。如果有人能够运行从Silverlight客户端到ASP.NET托管的PersistentConnection的经过身份验证的连接,我将非常感谢任何指点


PS:我还发现很奇怪,浏览器的网络跟踪不再显示信号器的流量,这是怎么回事?

您正在尝试通过域边界连接吗?在这种情况下,需要采取其他步骤-请参阅下页的“403禁止”部分:


AuthorizeRequest方法被调用两次。
当您的请求第一次没有发送auth头并且AuthorizeRequest应该返回false时,内部信号器堆栈会生成一个http响应,其中401个未经授权。然后,这次创建了第二个请求,发送auth头,您应该在IRequest.User.Identity.Name中看到用户名。一个简单的解决方案是将signar/src/Microsoft.AspNet.signar.Client/Http/HttpHelper.cs行号150更改为

request=(HttpWebRequest)System.Net.Browser.WebRequestCreator.BrowserHttp.Create(新Uri(url))

而不是

request=(HttpWebRequest)System.Net.Browser.WebRequestCreator.ClientHttp.Create(新Uri(url))


当连接的客户端为silverlight时,这将强制Signal使用浏览器堆栈而不是客户端堆栈。

Signal流量使用Http客户端发送,阅读本文档:有一件事可能会让您头疼,那就是signar的更高版本使用客户端堆栈而不是浏览器堆栈。这可能解释了这两种观察结果,谢谢!现在我只需要弄清楚如何强制它重新使用浏览器请求管道…我确实试过了。有点奏效了。最后,我回到了旧版本,因为有太多的差异,我没有时间也不想解决它们。