2012-09-27 23 views
3

我需要在我的應用程序中實現一些授權機制。授權是基於從客戶端發送到服務器的對象。控制器中的每個動作都將作爲參數List。基於此列表中對象的嵌套屬性,我必須授予或拒絕對控制器操作的訪問。我的第一個方法是使用自定義過濾器屬性ActionFilterAttribute授權

public class CustomAuthAttribute : FilterAttribute,IAuthorizationFilter 
{ 
    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     //SOME LOGIC HERE 
    } 
} 

然而,因爲事實上該請求是JSON請求,這是我很難獲取發送對象的每一個相關屬性的值(我只有存取權限json值)。這就是爲什麼我認爲我可以使用ActionFilterAttribute而不是FilterAttribute。

public class ActionFilterAuthorization: ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 

     var castedList = filterContext.ActionParameters["key"] as List<MyObject>; 
     //logic here 

     //throw exception is access is not granted 

    } 
} 

問題是這是否是很好的授權解決方案?也許這會更好地檢查行動內的授權?

回答

0

安全性是cross cutting concern,所以過濾器和屬性是它的理想場所。不得不在每次操作中手動檢查它,都會增加很多額外的代碼,這些代碼必須被維護,並且如果被遺忘,會增加安全風險。使其成爲一個全局過濾器意味着它將始終被應用,這意味着你可以編寫一個屬性,如果他們不需要它,可能會豁免一個Action/Controller。 AllowAnnoymous等enter link description here

關於安全的最好的一般性文章我發現MVC3是這一個http://www.codeproject.com/Articles/288631/Secure-ASP-NET-MVC3-applications