欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ASP.NET MVC AuthorizeAttribute

程序员文章站 2022-07-08 14:38:31
...

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类。