从围绕0.4.0 SignalR的自定义版本升级我发现身份验证不再有效。
我有一个RIA Services应用程序,其表单身份验证(基于库存AuthenticationBase<>)和HttpContext.Current从PersistentConnection的处理程序访问,用于携带用户身份。在IIS日志中,我看到身份仍然通过RIA请求传递。
升级到最新的SignalR我发现身份在HttpContext或传入的IRequest中都不可用。从Fiddler日志中,请求被403拒绝,并且不发送凭据。
将Connection.Credentials设置为新的NetworkCredentials()不会改变任何内容。
查看源代码和完全不合适的documentation并没有产生任何见解。如果任何人能够从Silverlight客户端运行经过身份验证的连接到ASP.NET托管的PersistentConnection,我会非常感谢任何指针!
PS:我也很好奇浏览器的网络跟踪不再显示SignalR的流量了,这里发生了什么?
答案 0 :(得分:0)
您是否尝试通过域边界进行连接?在这种情况下还需要采取其他步骤 - 请参阅下一页的“403禁止”部分:
http://www.asp.net/signalr/overview/troubleshooting-and-debugging/troubleshooting
答案 1 :(得分:0)
AuthorizeRequest方法被调用两次。 第一次您的请求没有发送auth头并且AuthorizeRequest应该返回false,然后内部SignalR堆栈产生一个带有401 Unauthorized的http响应。然后,这次发送第二个请求发送auth标头,你应该在IRequest.User.Identity.Name中看到用户名
答案 2 :(得分:0)
一个简单的解决方案是将SignalR / src / Microsoft.AspNet.SignalR.Client / Http / HttpHelper.cs第150行更改为
request =(HttpWebRequest)System.Net.Browser.WebRequestCreator.BrowserHttp.Create(new Uri(url));
而不是
request =(HttpWebRequest)System.Net.Browser.WebRequestCreator.ClientHttp.Create(new Uri(url));
当连接的客户端是silverlight时,它将强制signalR使用浏览器堆栈而不是客户端堆栈。