2

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

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

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

我怎样才能做到这一点?我一直在搜索一整天,没有找到任何关于它的东西:/

4

2 回答 2

0

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

  • 登录
  • 登记
  • 更改密码/更改密码成功

您只需要您希望保护的操作或类的 [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();
        }
于 2012-07-23T18:10:58.107 回答
0

我有同样的问题。
在此处查看解决方案:Webforms "UrlAuthorizationModule.CheckUrlAccessForPrincipal" 的 MVC 等效项

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

于 2013-09-26T21:24:59.120 回答