0

从大约 0.4.0 SignalR 的自定义版本升级,我发现身份验证不再有效。

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

升级到最新的 SignalR,我观察到身份在传入的 HttpContext 或 IRequest 中都不可用。从 Fiddler 日志中,请求被 403 拒绝并且不发送凭据。

将 Connection.Credentials 设置为 new NetworkCredentials() 不会改变任何东西。

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

PS:我也很好奇浏览器的网络追踪不再显示 SignalR 的流量,这是怎么回事?

4

3 回答 3

0

AuthorizeRequest 方法被调用两次。第一次您的请求没有发送 auth 标头并且 AuthorizeRequest 应该返回 false,然后 SignalR 堆栈在内部生成一个带有 401 Unauthorized 的 http 响应。然后,这次创建第二个请求发送身份验证标头,您应该在 IRequest.User.Identity.Name 中看到用户名

于 2013-06-25T23:25:40.263 回答
0

一个简单的解决方案是将 SignalR/src/Microsoft.AspNet.SignalR.Client/Http/HttpHelper.cs 行号 150 更改为

请求 = (HttpWebRequest)System.Net.Browser.WebRequestCreator.BrowserHttp.Create(new Uri(url));

代替

请求 = (HttpWebRequest)System.Net.Browser.WebRequestCreator.ClientHttp.Create(new Uri(url));

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

于 2013-06-28T14:37:50.393 回答
0

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

http://www.asp.net/signalr/overview/troubleshooting-and-debugging/troubleshooting

于 2013-06-25T20:29:17.917 回答