[英]SignalR ApplicationUserManager is disposed while using webSockets transport
[英]Custom Authorization using signalr PersistentConnection with websockets transport
我正在嘗試授權用戶進行SignalR中的某些連接,我的問題是,使用WebSockets作為傳輸方式,我不能在沒有異常的情況下設置HttpContext.Current.User。 授權對象還需要可以從控制器訪問,並且那里的身份驗證是使用IFilter實現在整個Web-api部分中自定義的。
在升級到支持Websocket的2012服務器之前,我們必須使用HttpContext.Current.User,一切正常,通過SignalR查看替代方案,[AuthorizeAttribute]有一個實現,但僅適用於Hubs(和我不確定使用Websockets時更改HttpContext.Current.User不會引發異常)。
在此先感謝圖騰。
事實證明,我在管道中做的太晚了,而不是在檢查OnConnected或OnAuthorizeRequest時檢查標頭以驗證用戶並設置HttpContext.Current.User(對於WebSockets,在設置中為時已晚) HttpContext.Current.User,由於不是我的自定義MessageHandler設置的,因此IRequest中的User對象是默認的空對象。
如果要編寫一個IHttpModule並授權所有解析為PersistantConnection的uri,然后設置HttpContext.Current.User,則IRequest中的User對象將正確傳播。
在PersistentConnection.AuthorizeRequest和PersistentConnection.OnConnected內部,您應該訪問作為參數而不是靜態HttpContext.Current.User屬性傳入的IRequest對象的User屬性。 這應該適用於所有運輸工具。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.