我正在做一個聊天應用程序的信號中心(這不是真的,但讓我們假裝它)。 我有我的授權設置,以便用戶可以被房間的創建者邀請到房間。所以有一個表格來存儲誰擁有什麼,誰擁有訪問權限。如何從[Authorize()]訪問SignalR Hub參數?
這很好。接下來的步驟是添加索賠,以便我不必檢查誰可以訪問每個請求上的內容。當用戶嘗試加入聊天室時,我會檢查一次,添加他們的聲明並將它們發送到啓動信號連接的頁面。
現在我想用我的樞紐[授權]裝飾,而不是拋出樣板
user.Claims.Any(x=> x.ClaimType == $"CanJoinRoom_{RoomId}");
我有一片一片,我需要的除了一個:實際參數指定房間ID
我已經就如何使這裏根據自定義策略的授權閱讀起來。我已經能夠從
[MyCustomAuthorizeMethod(this.Context.Request.Form["data"])]
破解的東西,但這個似乎有點難看,並使其工作,我必須序列此JSON
{"H":"myhubname","M":"Initialize","A":[39],"I":0}
這似乎真的哈克。我更喜歡傳遞RoomId作爲參數。 它只是一條線,但似乎是一個世界。有沒有一個優雅的方式來做到這一點?
你這樣做是錯誤的。你被黑客攻擊的事情發生了,因爲你使用長輪詢後,一旦選擇了不同的交通工具,你將無法訪問它。我不知道你想用數據做什麼,但是集線器是暫時的 - 也就是說你會爲每個調用獲得一個新的實例,所以如果你想在集線器中存儲某些東西,那麼它將無法工作。你爲什麼不在你試圖調用的'Initialize'方法中實現你的邏輯? – Pawel
我非常惱火,signalr不提供有關調用的元數據或任何類型的數據結構的乾淨apis。在經歷了所有實際接線調用的工作之後,你會認爲這將是微不足道的。謝謝你的幫助。 – Josiah
爲什麼你需要元數據(不知道它是什麼),如果你的方法被調用 - 所以你有方法名稱和參數?如果你需要元數據(不管它是什麼),創建一個元中心功能並從那裏發送。或者看看IHubRequestParser或IParameterResolver,但它可能會得到hacky。 – Pawel