4

アプリケーションに認証メカニズムを実装する必要があります。承認は、クライアントからサーバーに送信されるオブジェクトに基づいています。コントローラー内のすべてのアクションは、リストを引数として取ります。このリスト内のオブジェクトのネストされたプロパティに基づいて、コントローラー アクションへのアクセスを許可または拒否する必要があります。私の最初のアプローチは、カスタムフィルター属性を使用することでした

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

ただし、リクエストが json リクエストであるため、送信されたオブジェクトの関連するすべてのプロパティの値を取得するのは困難です (json 値にしかアクセスできません)。そのため、FilterAttribute の代わりに ActionFilterAttribute を使用できると考えました。

 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

    }
}

問題は、これが承認の良い解決策であるかどうかです。アクション内で承認を確認したほうがいいのではないでしょうか??

4

1 に答える 1

1

セキュリティは横断的な関心事であるため、フィルターと属性は理想的な場所です。すべてのアクションで手動でチェックする必要があると、保守が必要な余分なコードが大量に追加され、忘れた場合にセキュリティ リスクが増大します。これをグローバル フィルターにすることは、常に適用されることを意味します。つまり、アクション/コントローラーが不要な場合は除外する属性を記述できることを意味します

私が見つけた MVC3 のセキュリティに関する最も一般的な記事は、http://www.codeproject.com/Articles/288631/Secure-ASP-NET-MVC3-applicationsです。

于 2012-09-27T23:49:28.807 に答える