什么是Webform的“UrlAuthorizationModule.CheckUrlAccessForPrincipal”等同于MVC?

时间:2012-07-23 15:43:10

标签: asp.net-mvc routing webforms authorization httpmodule

我遇到了一个问题,因为我正在为我的公司编写自定义SSO解决方案。为了简单起见,我已经制作了一个自定义身份验证httpmodule来拦截所有请求,以便检查用户身份验证状态。如果未经过身份验证,则会将用户重定向到我的自定义sso登录页面。

问题是,当用户未经过身份验证时,我想检查他是否可以访问所请求的页面/资源...使用Webforms,没问题,我在web.config中添加授权块,并且我使用与匿名用户的 UrlAuthorizationModule.CheckUrlAccessForPrincipal 。一切都很好......

但是当我将我的模块应用到 MVC(3)网站时,这不再起作用了(原因很明显,比如可以从不同的网址访问同一控制器和/或操作使用路由时,以及授权是通过控制器属性进行的。)

我怎样才能做到这一点?我整天都在搜索,没有找到任何相关内容:/

2 个答案:

答案 0 :(得分:0)

ASP.NET MVC 3 Internet应用程序模板包含一个基本的AccountController,它实现了以下操作(以及相关的模型和视图):

  • LogOn支持
  • 注册
  • ChangePassword / ChangePasswordSuccess

您只需要要保护的操作或类的[Authorize]属性。但是,如果你需要一些真正定制的东西,你可以做我喜欢的事情。

我创建了一个自定义类来覆盖我的应用程序中的安全性。

public class AuthorizeActivityAttribute : AuthorizeAttribute
    {
       protected override bool AuthorizeCore(HttpContextBase httpContext)
       {
        HttpContext currentContext = HttpContext.Current;

        //Do your custom authentication stuff here and return true or false depending on results
        Return true;
       }
    }

现在我的控制器中有以下内容:

[AuthorizeActivity] 
        public ActionResult Index()
        {
            ViewBag.Message = "Welcome";

        return View();
        }

答案 1 :(得分:0)

我遇到了同样的问题 请在此处查看解决方案:MVC equivalent of Webforms "UrlAuthorizationModule.CheckUrlAccessForPrincipal"

  

您必须从其他控制器读取信息。这个   可以通过实例化其上下文和描述符来完成   实例化该控制器的AuthorizationContext并读取   过滤信息。