【Web API2】ASP.NET Web API Security
实现安全的方式既可以是host提供,也可以框架提供。
1,HTTP Module 方式,工作在IIS上,所以web api要托管在IIS上才行。其作用于HTTP管道的最前端,所以这种方式影响的是全局,对每一个请求都要拦截,因此弹性不足。
2,OWIN Middleware,Owin是新一代Asp.Net Web开发架构,有着非常简单的规范定义,目标是用于解耦Web Server和Web Application.,不再依赖System.Web,Middleware也是属于请求拦截器,类似HTTP Module,会拦截所有的请求,影响全局。其作用于OWIN pipeline(因此需要满足OWIN标准的web服务器支持),Web API 2框架也支持这种方式。中间件的好处是可在不同框架中通用,例如MVC,同时OWIN解耦了web服务器(IIS),因此中间件可以在自托管或者非IIS上使用。当然也支持微软自家的IIS,前提是(IIS-integrated) ASP.NET pipeline。
中间件的注册
using Owin;
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.Use<AuthenticationMiddleware>();
app.Use<CacheMiddleware>();
}
}
要忽略host level的中间件,可以使用如下方法
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services // Web API routes
config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.SuppressDefaultHostAuthentication();//忽略host默认的认证方式
}
}
这里的host其实是一个进程,owin程序的载体,目前有三种(IIS/ASP.NET,Custom Host,OwinHost.exe),Server的作用是open a network socket, listen for requests, and send them through the pipeline of OWIN components specified by the user。目前server有两种实现Microsoft.Owin.Host.SystemWeb和Microsoft.Owin.Host.HttpListener
参考:http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana

owin托管在IIS中(需要Microsoft.Owin.Host.SystemWeb.dll支持)

3,Message Handler方式,前两种都是属于host提供的方式,而Message Handler是web api框架提供的。他不依赖host或者server。但是它的作用粒度还是不够细,只能作用于全局或者特定的路由。

作用范围实例:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "Route1",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
); config.Routes.MapHttpRoute(
name: "Route2",
routeTemplate: "api2/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: null,
handler: new MessageHandler2() // per-route message handler,特定路由
); config.MessageHandlers.Add(new MessageHandler1()); // global message handler,全局
}
}
4,Filter方式,这类似MVC过滤器概念。同样是由web api框架提供的,不依赖host或者server,可以作用于全局、控制器、Action级别。
请求顺序是:先经过认证过滤器(authentication filters),再经过授权过滤器(authorization filters)
设计认证过滤器的原则是:仅负责验证凭据(only responsibility of validating the credential)
如果凭证不存在,则忽略(不处理匿名请求),如果存在但是验证失败,则返回unauthorized(context.ErrorResult=UnauthorizedResult)
如果存在并验证通过,则设置context.Principal,这个属性是IPrincipal的实现,是基于角色的的访问控制,而不是Claims-based的

全局作用范围注册方法:
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: “DefaultApi”,
routeTemplate: “api/{controller}/{id}”,
defaults: new { id = RouteParameter.Optional }
); // add global authorization filter
config.Filters.Add(new ClaimsAuthorizeAttribute());
}
注意示例中的继承关系
ClaimsAuthorizeAttribute继承自System.Web.Http.AuthorizeAttribute
AuthorizeAttribute继承自System.Web.Http.Filters.AuthorizationFilterAttribute
5,以上几种方式混合使用时,对于IIS,请求管道中顺序如下所示:

【Web API2】ASP.NET Web API Security的更多相关文章
- 【翻译】ASP.NET Web API是什么?
原文 [翻译]ASP.NET Web API是什么? 说明:随微软ASP.NET MVC 4一起发布的还有一个框架,叫做ASP.NET Web API.目前国内关注这项技术的人似乎还很少,这方面的文章 ...
- 【转】【完全开源】百度地图Web service API C#.NET版,带地图显示控件、导航控件、POI查找控件
[转][完全开源]百度地图Web service API C#.NET版,带地图显示控件.导航控件.POI查找控件 目录 概述 功能 如何使用 参考帮助 概述 源代码主要包含三个项目,BMap.NET ...
- 【dotnet跨平台】Asp.net 正在经历的变革
[dotnet跨平台]Asp.net 正在经历的变革 Asp.net 正在经历一场变革.从官网:https://get.asp.net/ 我们能够看到多个版本号的字眼例如以下: ASP.NET ...
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【第二篇】ASP.NET MVC快速入门之数据注解(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【Azure Developer】使用Microsoft Graph API 批量创建用户,先后遇见的三个错误及解决办法
问题描述 在先前的一篇博文中,介绍了如何使用Microsoft Graph API来创建Azure AD用户(博文参考:[Azure Developer]使用Microsoft Graph API 如 ...
- 【ASP.NET Web API2】初识Web API
Web Api 是什么? MSDN:ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务 百度百科:Web API是网络应用程序接口. ...
- 【ASP.NET Web API2】利用HttpClient调用Web API(TODO)
参照: 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用 纯属记录一下遇到的问题: 我们利用HttpClient来调用自宿主方式寄宿的Web API.HttpCl ...
- 【转载】Asp .Net Web Api路由路径问题
原文章地址:https://www.cnblogs.com/devtester/p/8897302.html MVC也好,WebAPI也好,据我所知,有部分人是因为复杂的路由,而不想去学的.曾经见过一 ...
随机推荐
- UCloud 云服务器硬盘扩容后 如何挂载到本机
UCloud 云服务器硬盘扩容后如何挂载到本机 UCloud 提供的云服务器会根据不同的系统初始化不同空间大小的硬盘资源,此资源默认为 系统盘. 针对 Linux 系统默认初始化 20G 的空间,一般 ...
- ODBC、OLEDB、ADO、SQL的关系
对于一个刚接触数据库的菜鸟来说(比如我),总是搞不清SQL.ADO.OLE DB.ODBC,大脑中一片混乱,好像懂了,又好像没懂,非常的苦恼,今天下了点功夫研究了一下,贴出来,其中肯定有好多错误,希望 ...
- Php header()函数及其常见使用
语法: Void header(string $string[,bool $replace=true [, int $http_response_code) 向客户端发送原始的HTTP报头 需注意: ...
- 【转】使用JMeter 完成常用的压力测试(一)
本文介绍了 JMeter 相关的基本概念.并以 JMeter 为例,介绍了使用它来完成最常用的三种类型服务器,即 Web服务器.数据库服务器和消息中间件,压力测试的方法.步骤以及注意事项. 讲到测试, ...
- 分布式缓存系统 Memcached 数据存储slab与hashtable
缓存数据以item为基本单元,以双链表形式存放在对应级别大小的slabclass结构的chunk中.同时该item还存放在链式hashtable中bucket中,用于提供快速查找的索引. 首先是理解缓 ...
- AngularJS:控制器
ylbtech-AngularJS:控制器 1.返回顶部 1. AngularJS 控制器 AngularJS 控制器 控制 AngularJS 应用程序的数据. AngularJS 控制器是常规的 ...
- 1017 Queueing at Bank
题意:银行有K个窗口用于服务,给出所有人的达到时间T和服务时间P,计算所有被服务的客户的平均等待时间.任何客户的服务时间不得超过60分钟.早于08:00到的,要等到08:00:在17:00:01及之后 ...
- 1118 Birds in Forest
题意: 思路:并查集模板题. 代码: #include <cstdio> #include <algorithm> using namespace std; ; int fat ...
- JCE无限制权限策略文件
JCE无限制权限策略文件,里面是对应jdk6和jdk7的文件 官网下载地址是 JDK6:http://www.oracle.com/technetwork/java/javase/downloads/ ...
- Python中调用设置环境变量的bat
工作中用到一个python脚本,自动化运行某目录下的多个vc工程代码. 编译工程代码的命令如下,直接运行会失败,系统找不到devenv,我们需要添加devenv.exe所在的目录到环境变量中. os. ...