2013-06-25 42 views
0

從0.4.0 SignalR左右的自定義生成中升級我發現身份驗證不再有效。從Silverlight客戶端持續連接的SignalR身份驗證

我有一個RIA Services應用程序,帶有表單身份驗證(基於股票AuthenticationBase <>)和HttpContext.Current從PersistentConnection的處理程序訪問用於承載用戶身份。在IIS日誌中,我看到身份仍然通過RIA請求傳遞。

升級到最新的SignalR我發現身份在HttpContext或IRequest傳入時不可用。從Fiddler日誌中,請求被拒絕,且403不發送證書。

將Connection.Credentials設置爲新的NetworkCredentials()不會改變任何內容。

看着源代碼和完全不足documentation還沒有產生任何見解。如果任何人能夠運行從Silverlight客戶端到ASP.NET託管的PersistentConnection的身份驗證連接,我將非常感謝任何指針!

PS:我也覺得它很好奇瀏覽器的網絡跟蹤不再顯示SignalR的流量,這裏發生了什麼?

+1

SignalR流量是使用Http客戶端發送的,請閱讀以下文檔:http://msdn.microsoft.com/en-us/library/dd920295(v=vs.95).aspx –

+0

有一件事可能會讓你感到咬人SignalR的更新版本使用客戶端堆棧而不是瀏覽器堆棧。 – davidfowl

+0

這可能解釋這兩個意見,謝謝!現在我只需要弄清楚如何強制它使用瀏覽器請求管道... –

回答

0

的AuthorizeRequest方法被調用兩次。 您的請求第一次沒有發送auth頭信息,AuthorizeRequest應該返回false,然後內部SignalR堆棧產生一個401響應,未經授權。然後,這次創建第二個請求發送auth頭文件,您應該在IRequest.User.Identity.Name中看到用戶名

+0

沒有發生。 –

0

一個簡單的解決方案是將SignalR/src/Microsoft.AspNet.SignalR.Client/Http/HttpHelper.cs行號150到

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

代替

請求=(HttpWebRequest的)System.Net.Browser.WebRequestCreator.ClientHttp.Create(新URI(URL));

當連接的客戶端是silverlight時,將強制signalR使用瀏覽器堆棧而不是客戶端堆棧。

+0

我其實已經試過了。它有點工作。最後,我最終回到了舊版本,因爲差異太大,我沒有時間也不想解決它們。 –