AuthenticateRequest和AuthorizeRequest之间有什么区别

时间:2012-07-11 11:37:14

标签: asp.net-mvc-3 security authentication authorization

您能解释HttpApplication.AuthenticateRequestHttpApplication.AuthorizeRequestASP.NET MVC 3之间的差异吗?他们什么时候会发生?假设这种情况:

我的User有一个名为IsBanned的属性,我想在每个请求中检查他/她的IsBanned属性。如果是true,我会将User重定向到错误页面。但并非针对所有请求,只是请求[Authorize]属性对其操作进行签名。好的,对于这类行为,HttpApplication.AuthenticateRequest会发生HttpApplication.AuthorizeRequest还是其他什么?

我知道我可以在SignIn|LogOn操作中检查此属性。但我的意思是:

  • 用户请求登录
  • 我检查了属性IsBanned,它是false
  • 用户已登录
  • 用户查看网站的某些页面
  • 管理员禁止用户(当他登录时)
  • 用户请求具有[Authorize]属性
  • 的页面(操作)
  • 用户已登录(在此之前。记得吗?)
  • 所以我必须显示请求的页面
  • 但是用户通过admin
  • 给出了禁止的标志
  • 如何阻止用户查看请求的页面?

提前致谢。

1 个答案:

答案 0 :(得分:1)

我认为你不需要处理HttpApplication.AuthenticateRequestHttpApplication.AuthorizeRequest。我会使用自定义Authorize属性来解决它。

public class MyAuthorizeAttribute : AuthorizeAttribute {

        protected override bool AuthorizeCore(HttpContextBase httpContext) {
            bool authorizerPrimarily = base.AuthorizeCore(httpContext);

            if(authorizedPrimarily){
               return user_not_banned;
            }

            return authorizerPrimarily;
        }
}

您可以从httpContext.User.Identity.Name获取用户名。用它来从数据库中获取数据。

评论-1更新

要将被禁用户重定向到特定页面,您可以执行以下操作:

if(authorizedPrimarily){
   if(user_banned){
      httpContext.Response.Redirect("url of banned message");
      return false;
   }

  return true;
}