ASP.NET WebApi总结之自定义权限验证

摘要:
publicAuthorizeAttribute();////Summary://Get或设置授权角色。publicoverridevoidOnAuthorization;////Summary://The请求无法处理授权。protectedvirtualvoidHandleUnauthorizedRequest;////Summary://Indicates指定的控制是否被授权。受保护的虚拟工具已授权;}}另一个在#region装配系统中。网状物Mvc,版本=5.2.3.0,区域性=中性,公钥令牌=31bf3856ad64e35//E:srcpackagesMicrosoft。AspNet。Mvc公司。5.2.3 libet45系统。网状物Mvc公司。dll#endregionnamespaceSystem。Web Mvc{///Summary://Specify对控制器或操作方法的访问仅限于满足授权要求的用户。[AttributeUsage]publicclassAuthorizeAttribute:FilterAttribute,IAuthorizationFilter{///Summary://InitializeSystem.Web.Mvc的新实例。AuthorizeAttribute类。公开虚拟授权///Summary://When重写时,为自定义授权检查提供了入口点。filterContext对象包括控制器、HTTP上下文、请求上下文、操作结果和路由数据。

在.NET中有两个AuthorizeAttribute类,

一个定义在System.Web.Http命名空间下

#region 程序集 System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// E:srcpackagesMicrosoft.AspNet.WebApi.Core.5.2.3lib
et45System.Web.Http.dll
#endregion

using System.Web.Http.Controllers;
using System.Web.Http.Filters;

namespace System.Web.Http
{
    //
    // 摘要:
    //     指定用于验证请求的 System.Security.Principal.IPrincipal 的授权筛选器。
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
    public class AuthorizeAttribute : AuthorizationFilterAttribute
    {
        //
        // 摘要:
        //     初始化 System.Web.Http.AuthorizeAttribute 类的新实例。
        public AuthorizeAttribute();

        //
        // 摘要:
        //     获取或设置授权角色。
        //
        // 返回结果:
        //     角色字符串。
        public string Roles { get; set; }
        //
        // 摘要:
        //     获取此特性的唯一标识符。
        //
        // 返回结果:
        //     此特性的唯一标识符。
        public override object TypeId { get; }
        //
        // 摘要:
        //     获取或设置授权用户。
        //
        // 返回结果:
        //     用户字符串。
        public string Users { get; set; }

        //
        // 摘要:
        //     为操作授权时调用。
        //
        // 参数:
        //   actionContext:
        //     上下文。
        //
        // 异常:
        //   T:System.ArgumentNullException:
        //     上下文参数为 null。
        public override void OnAuthorization(HttpActionContext actionContext);
        //
        // 摘要:
        //     处理授权失败的请求。
        //
        // 参数:
        //   actionContext:
        //     上下文。
        protected virtual void HandleUnauthorizedRequest(HttpActionContext actionContext);
        //
        // 摘要:
        //     指示指定的控件是否已获得授权。
        //
        // 参数:
        //   actionContext:
        //     上下文。
        //
        // 返回结果:
        //     如果控件已获得授权,则为 true;否则为 false。
        protected virtual bool IsAuthorized(HttpActionContext actionContext);
    }
}

另一个在System.Web.Mvc命名空间下

#region 程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// E:srcpackagesMicrosoft.AspNet.Mvc.5.2.3lib
et45System.Web.Mvc.dll
#endregion

namespace System.Web.Mvc
{
    //
    // 摘要:
    //     指定对控制器或操作方法的访问只限于满足授权要求的用户。
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
    public class AuthorizeAttribute : FilterAttribute, IAuthorizationFilter
    {
        //
        // 摘要:
        //     初始化 System.Web.Mvc.AuthorizeAttribute 类的新实例。
        public AuthorizeAttribute();

        //
        // 摘要:
        //     获取或设置有权访问控制器或操作方法的用户角色。
        //
        // 返回结果:
        //     有权访问控制器或操作方法的用户角色。
        public string Roles { get; set; }
        //
        // 摘要:
        //     获取此特性的唯一标识符。
        //
        // 返回结果:
        //     此特性的唯一标识符。
        public override object TypeId { get; }
        //
        // 摘要:
        //     获取或设置有权访问控制器或操作方法的用户。
        //
        // 返回结果:
        //     有权访问控制器或操作方法的用户。
        public string Users { get; set; }

        //
        // 摘要:
        //     在过程请求授权时调用。
        //
        // 参数:
        //   filterContext:
        //     筛选器上下文,它封装有关使用 System.Web.Mvc.AuthorizeAttribute 的信息。
        //
        // 异常:
        //   T:System.ArgumentNullException:
        //     filterContext 参数为 null。
        public virtual void OnAuthorization(AuthorizationContext filterContext);
        //
        // 摘要:
        //     重写时,提供一个入口点用于进行自定义授权检查。
        //
        // 参数:
        //   httpContext:
        //     HTTP 上下文,它封装有关单个 HTTP 请求的所有 HTTP 特定的信息。
        //
        // 返回结果:
        //     如果用户已经过授权,则为 true;否则为 false。
        //
        // 异常:
        //   T:System.ArgumentNullException:
        //     httpContext 参数为 null。
        protected virtual bool AuthorizeCore(HttpContextBase httpContext);
        //
        // 摘要:
        //     处理未能授权的 HTTP 请求。
        //
        // 参数:
        //   filterContext:
        //     封装有关使用 System.Web.Mvc.AuthorizeAttribute 的信息。filterContext 对象包括控制器、HTTP 上下文、请求上下文、操作结果和路由数据。
        protected virtual void HandleUnauthorizedRequest(AuthorizationContext filterContext);
        //
        // 摘要:
        //     在缓存模块请求授权时调用。
        //
        // 参数:
        //   httpContext:
        //     HTTP 上下文,它封装有关单个 HTTP 请求的所有 HTTP 特定的信息。
        //
        // 返回结果:
        //     对验证状态的引用。
        //
        // 异常:
        //   T:System.ArgumentNullException:
        //     httpContext 参数为 null。
        protected virtual HttpValidationStatus OnCacheAuthorization(HttpContextBase httpContext);
    }
}

两者主要区别在于:

  • System.Web.Http 这个主要是用在Web Api
  • System.Web.Mvc 这个主要用在 ASP.NET MVC
  • System.Web.Http 版本中,传入参数为HttpActionContext
    public override void OnAuthorization(HttpActionContext actionContext);

    System.Web.Mvc版本中,传入参数为AuthorizationContext

    public virtual void OnAuthorization(AuthorizationContext filterContext);

看似相同,但是在处理自定义权限的时候,两者思路相近实际实现方式上有很大的差别。

下面列出两种属性下获取Cookie的不同:

MVC:

public class Foo : AuthorizeAttribute
{
     public override void OnAuthorization(AuthorizationContext filterContext) 
     {
          HttpCookie cookie = filterContext.HttpContext.Request.Cookies.Get("Bar");    
     }
}

HTTP(Web Api):

public class Foo : AuthorizeAttribute
{

      public override void OnAuthorization(HttpActionContext actionContext)
      {
           var cookies = actionContext.Request.Headers.GetCookies("Bar").FirstOrDefault();

           var cookie = cookies["Bar"];
      }
}

还有就是自定义权限处理的时候,写法也不尽相同,后续文章会进行介绍

免责声明:文章转载自《ASP.NET WebApi总结之自定义权限验证》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇十大渗透测试演练系统Windows10更新系统后,无法打开VMware下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WebService基于SoapHeader实现安全认证

本文仅提供通过设置SoapHeader来控制非法用户对WebService的调用,如果是WebService建议使用WSE3.0来保护Web服 务,如果使用的是Viaual Studio 2008可以使用WCF,WCF里面提供了更多的服务认证方法。以下提供一种基于SoapHeader的自定义验证方式。 1.首先要自定义SoapHeader,须继承Syste...

windows-System权限获取任意用户权限目录-举例GetTempPath

目录 一丶简介 二丶代码 一丶简介 在System权限启动我们的程序之后.如果程序内部使用了GetTempPath()函数.或者使用了其它跟用户权限有关的函数.则获取的路径不是你想要的.比如 你在System权限下使用了GetTempPath() 那么获取的temp路径有可能就是 "C:WindowsTemp" 而我们想要获取的路径则是 "C:...

出现 "System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本" 错误的解决办法

出现 "System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本" 错误的解决办法 1.问题: 在Windows SP2 + VS2005 + Oracle 9i +IIS5.1环境中运行ASP.NET网页的时候出现如下错误: System.Data.OracleClient 需要 Oracle 客户端软...

Application.DoEvents()笔记

msdn的备注:当运行 Windows 窗体时,它将创建新窗体,然后该窗体等待处理事件。 该窗体在每次处理事件时,均将处理与该事件关联的所有代码。 所有其他事件在队列中等待。 当代码处理事件时,应用程序不会响应。 例如,如果将甲窗口拖到乙窗口之上,则乙窗口不会重新绘制。如果在代码中调用 DoEvents,则您的应用程序可以处理其他事件。 例如,如果您有向...

无法启动计算机“”上的服务 ReportServer 错误1053:服务没有及时响应启动或控制请求

背景: 网络组同事在服务器上安装防病毒软件并且修改了administrator帐号的密码,然后重启电脑后,reproting services就无法启动了。 出现错误如下: 1.报表服务器网页显示错误 System.InvalidOperationException: 无法启动计算机“ ”上的服务 ReportServer。 ---> System....

记一次内存泄漏DUMP分析

自从进入一家创业公司以后,逐渐忙成狗,却无所收获,感觉自身的技术能力用武之地很少,工作生活都在业务逻辑中颠倒。 前些天线上服务内存吃紧,让运维把DUMP拿下来,分析一下聊以自慰。 先来统计一下大对象信息 0:000> !dumpheap -min 85000 -stat Statistics: MT Count...