ASP.NET MVC AuthorizeAttribute

AuthorizeAttribute 是 ASP.NET MVC 的过滤器之一,又称为认证和授权过滤器,即判断登录与否授权与否。当为某个控制器或动作方法附加该特性时,没有登录或授权的账户是不能访问对应的控制器或动作方法的。

在进入一个附加Authorize特性的控制器或动作之前,首先执行的是 AuthorizeAttribute 类的 OnAuthorization(AuthorizationContext filterContext)方法,接着 OnAuthorization() 会去调用其他诸如 AuthorizeCore() 方法。

//特性,用于标记在授权期间要跳过System.Web.Mvc.AuthorizeAttribute的控制器和操作
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited=true, AllowMultiple=true)]
public class AuthorizeAttribute:FilterAttribute, IAuthorizationFilter
{
    public AuthorizeAttribute();
    public string Roles { get; set; }
    public override object TypeId{ get; }
    public string Users { get; set; }
    /*AuthorizeAttribute的OnAuthorization方法内部调用AuthorizeCore方法,实现验证和授权逻辑。*/
    protected virtual bool AuthorizeCore(HttpContextBase httpContext);
    /*若AuthorizeCore返回false才会执行HandleUnauthorizedRequest*/
    protected virtual void HandleUnauthorizedRequest(AuthorizationContext filterContext);
    public virtual void OnAuthorization(AuthorizationContext filterContext);
    protected virtual HttpValidationStatus OnCacheAuthorization(HttpContextBase httpContext);
}

AuthorizeAttributeOnAuthorization() 方法内部调用了 AuthorizeCore(), 这个方法是实现验证和授权逻辑的地方,若这个方法返回为 true 则表示授权成功。若返回为 false 则表示授权失败,会给上下文设置一个 HttpUnauthorizedResult,这个 ActionResult 执行的结果是向浏览器返回一个 404 状态码,通常是跳转到一个登陆页面,可以重写 AuthorizeAttributeHandlerUnauthorizedRequest 跳转到相应的页面。

在ASP.NET MVC中使用身份验证和权限控制,但部分页面是可以匿名访问的,使用AllowAnonymous属性可指定需要匿名访问的控制器,从而跳过身份验证。

Web应用程序要求在用户登录之后才授予其受限制内容的访问权限,某些应用中,即时登录用户,也会限制它们查看的内容或可以编辑的字段。要限制对ASP.NET MVC视图的访问,可限制对呈现视图的操作方法的访问。为此,MVC框架提供AuthorizeAttribute类。

你可能感兴趣的:(ASP.NET MVC AuthorizeAttribute)