簡體   English   中英

使用signaler PersistentConnection和websockets傳輸進行自定義授權

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM