2012-07-23 50 views
2

我在为我的公司编写自定义SSO解决方案时遇到问题。为了简单起见,我制作了一个自定义身份验证httpmodule,拦截所有请求以检查用户身份验证状态。如果未通过身份验证,用户将被重定向到我的自定义sso登录页面。什么是Webform的“UrlAuthorizationModule.CheckUrlAccessForPrincipal”等同于MVC?

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

但是,当我在我的模块应用到MVC(3)网站,这不工作了(原因很明显,就像可能性从访问相同的控制器和/或行动使用路由时不同的URL,因为授权是通过控制器属性进行的)。

我该如何做到这一点?我一整天都在搜索,没有找到任何有关的信息:/

+0

回答这里 - > http://stackoverflow.com/questions/19038186/mvc-equivalent-of-webforms-urlauthorizationmodule-checkurlaccessforprincipal – MichaC 2013-09-26 21:49:47

回答

0

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

  • LogOn支持
  • 注册
  • ChangePassword/ChangePasswordSuccess

你只需要在操作或CL的[授权]属性驴想要保护。但是如果你需要一些非常自定义的东西,你可以像我所做的那样做。

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

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(); 
     } 
+0

感谢名单回答;),但是这不是我问不幸。我已经知道如何保护对控制器和操作的访问,但是我需要的是:在控制器处理请求之前(当我在httpmodule中时)如何以编程方式知道当前请求是被允许还是拒绝? – PAP 2012-07-23 21:27:38

相关问题