我遇到了一个问题,因为我正在为我的公司编写自定义SSO解决方案。为了简单起见,我已经制作了一个自定义身份验证httpmodule来拦截所有请求,以便检查用户身份验证状态。如果未经过身份验证,则会将用户重定向到我的自定义sso登录页面。
问题是,当用户未经过身份验证时,我想检查他是否可以访问所请求的页面/资源...使用Webforms,没问题,我在web.config中添加授权块,并且我使用与匿名用户的 UrlAuthorizationModule.CheckUrlAccessForPrincipal 。一切都很好......
但是当我将我的模块应用到 MVC(3)网站时,这不再起作用了(原因很明显,比如可以从不同的网址访问同一控制器和/或操作使用路由时,以及授权是通过控制器属性进行的。)
我怎样才能做到这一点?我整天都在搜索,没有找到任何相关内容:/
答案 0 :(得分: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();
}
答案 1 :(得分:0)
我遇到了同样的问题
请在此处查看解决方案:MVC equivalent of Webforms "UrlAuthorizationModule.CheckUrlAccessForPrincipal"
您必须从其他控制器读取信息。这个 可以通过实例化其上下文和描述符来完成 实例化该控制器的AuthorizationContext并读取 过滤信息。