2012-02-03 95 views
1

我們爲ASP.NET MVC3應用程序實現了基於REST的體系結構。 我們正在考慮爲我們通過我們的服務公開的合同實施自定義授權的架構決策。REST服務中的自定義授權+ MVC 3

例如任何有效的經過身份驗證的用戶都可以訪問合同的特定方法實現,並可能想要訪問其他用戶的信息(通過Stored Proc從數據中獲取項目列表),我們需要在返回此項目列表後檢查這個經過身份驗證的用戶是否有適當的權限來訪權限檢查基於繁重的業務邏輯,因此基於屬性的授權在此情況下可能沒有幫助,因爲只有在取回數據後,我們才能決定訪問權限檢查。

請諮詢如何在我們的REST服務中實現這個安全模型。

回答

1

由於基於屬性的權威性似乎不會爲你工作,那麼你需要確定他們是否適合您需要的角色:

 

HttpContext.Current.User.IsInRole() 

後您的控制器簡單地返回一個

HttpUnauthorizedResult
這是一個ActionResult 。 因此,檢查您的業務邏輯,如果他們沒有授權,然後返回HttpUnauthorizedResult,你就完成了。

http://msdn.microsoft.com/en-us/library/system.web.mvc.httpunauthorizedresult.httpunauthorizedresult(v=vs.98).aspx

+0

亞當thanks.I想,我是不是在提issue.I將嘗試通過一個例子來解釋清楚:假設你有一個名爲ProductsView視圖,其型號:ProductsModel,其控制器:ProductsController的,基於REST的服務來獲取產品列表:IP產品(實施方案是使用GetProducts方法的產品類)。現在Controller內部調用Model的方法來檢索產品列表,Model繼而調用REST服務:https:// blah/GetProducts /?userName ='xyz'。現在,用戶:xyz是通過我們已經實施的MVC安全模型驗證的有效用戶 – 2012-02-03 14:59:38

+0

一旦呼叫進入REST服務:GetProducts /?username ='xyz',服務將從數據庫獲取產品列表;在取回此列表後,我們需要檢查此列表中的某些項是否允許基於複雜的業務邏輯訪問用戶。因此,在取回數據後,我們需要執行此授權檢查。因此,我們正在考慮如何在我們的服務代碼中實施這種情況,一旦數據被檢索,您就可以進行授權。 – 2012-02-03 15:03:10

+0

只是一個fyi,模型一般應該是輕量級的,沒有任何行爲,除非與視圖有關。一個倉庫可以做到這一點,然後返回一個或多個模型。儘管如此,在用戶未被授權時會發生什麼情況。你想要返回一個HTTP401代碼,還是僅僅刪除產品? – 2012-02-03 19:05:29