MSDN は、MVC ルーティングとセキュリティについて非常に明確です。
MVC アプリケーションを保護するためにサポートされている唯一の方法は、各コントローラーに AuthorizeAttribute 属性を適用し、login および register アクションで AllowAnonymousAttribute 属性を使用することです。
ただし、次のアプローチを検討しています。
まず、カスタム STS からの情報に基づいてセキュリティ チェックを実行するカスタム コントローラー ファクトリを実装しました。
とりわけ、STS によって発行されるトークンには、ユーザーがアクセスできるすべての MVC ルートを記述するクレームが含まれています。
次に、CreateController メソッド内のユーザー クレームを確認します。
public class SecuredControllerFactory : IControllerFactory
{
public IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
{
...
bool isAuthorized = principal.HasRequiredRight(verb, ressource);
...
}
}
このようにして、アプリケーションを再デプロイすることなく、セキュリティ ルールを一元的に構成および更新できます。さらに、「構成よりも規約」の考え方に適合します。
このアプローチに何か問題がありますか?なぜそれが悪い習慣と見なされるのかわかりませんか?誰かがこれで具体的なセキュリティの問題を示すことができますか?