0

我有一個3層的MVC解決方案:MVC的Web - 業務層 - 數據訪問層MVC 5 Windows身份驗證在AuthorizeAttribute和服務層

我有用戶和組數據庫後端的自定義表,則用戶組映射到自定義權限結構。身份驗證需要檢查用戶的存在,授權需要根據用戶的權限驗證用戶可以執行的操作。

我可以通過實現一個自定義的AuthorizeAttribute並詢問服務級別是否存在用戶表中的HttpContext.User.Identity.Name,並根據控制器和操作驗證用戶權限,從而執行身份驗證和授權。

但是,服務級別需要在從控制器中的操作調用時再次授權用戶。這可以更好地控制用戶可以做什麼和不可以做什麼 - 例如,根據用戶組成員資格,有些字段是隻讀或隱藏的。

問題是,我將最終在控制器操作的AuthorizeAttribute和控制器操作本身(通過服務級別)內對用戶進行身份驗證和授權。

這是一個比其他任何事情都要多的設計問題,但是想要看看我是否正以最佳方式接近問題!

回答

0

如果我正確理解您的問題,您需要檢查您的服務層上的用戶權限/角色,並根據此來執行一些邏輯。答案真的取決於你使用的服務層的類型是什麼?它是一個基於Web API或基於接口的服務合同。如果您正在使用web api,那麼您可以在使用MVC和Web Api調用您的web api控制器操作(這是SPA的常見體系結構)之前在Authorization標頭中注入令牌。在這種情況下,Web API和MVC無需託管在同一臺服務器上,因爲您使用的是無記名令牌方式。如果您使用的是基於cookie的身份驗證,那麼情況就不一樣了。

+0

感謝您的回答@himanshu。目前服務層是一個緊密耦合的dll(即沒有接口的直接項目引用)。身份驗證是Windows身份驗證,用戶名作爲方法參數傳遞給服務層。將來我會想要抽象這個服務層。我的問題是,我將複製授權,因爲我將在AuthorizeAttirbute中執行操作,然後再次在服務層中執行操作。 – sjr