WebApi2官网学习记录--- Authentication与Authorization
Authentication(认证)
WebAPI中的认证既可以使用HttpModel也可以使用HTTP message handler,具体使用哪个可以参考一下依据:
- 一个HttpModel可以检测ASP.NET请求管道中的所有请求,一个message handler仅仅可以检测到被路由到这个WebAPI的请求
- 可以预先设置message handlers,让特定的route使用指定的authentication scheme
- Http Module只能在IIS中使用,Message hans可以在任意ost-agnostic环境中使用(web-hosting和self-hosting)
- HTTP Module在IIS中参与登陆、审计等过程
- HTTP Module在管道事件初期就执行了,如果使用的是message handler,principal直到handler执行时才被赋值
通常。如果不需要运行在self-hosting环境中的话,HTTP model是一个很好的选择,反之,可以考虑message handler。
设置Principal
如果application需要执行自定义的authentication逻辑,需要在两个地方设置principal
- Thread.CurrentPrincipal 用于.NET
- HttpContext.Current.User 用于ASP.NET
private void SetPrincipal(IPrincipal principal)
{
Thread.CurrentPrincipal = principal;
if (HttpContext.Current != null)
{
HttpContext.Current.User = principal;
}
}
Authorization(授权)
授权在靠近controller时被执行,目的是为了可以有更多机会进行细粒度控制对资源的访问。
- Authorization filters在controller action之前执行,如果没有授权action不会被调用
- 在controller action的内部,可以从ApiController.User中获得当前的principal
使用[Authorize] 特性
Authorize可以应用到Globally、controller、action级别。优先级:action>controller>globally
[Authorize]
public class ValuesController : ApiController
{
[AllowAnonymous]//允许匿名访问
public HttpResponseMessage Get() { ... }
//授权用户才能访问
public HttpResponseMessage Post() { ... }
}
还可以控制action的访问所需的权限
[Authorize(Users="Alice,Bob")]
public class ValuesController : ApiController
{
} // Restrict by role:
[Authorize(Roles="Administrators")]
public class ValuesController : ApiController
{
}
自定义Authorization Filters
自定义authorization过滤器,可以通过继续AuthorizeAttribute或AuthorizationFilterAttribute或IAuthorizationFilter来实现,如果是cpu密集型的身份验证逻辑应使用同步的方式,如果是IO密集型的应使用异步方法。
AuthorizeAttribute的层级关系:
WebApi2官网学习记录--- Authentication与Authorization的更多相关文章
- WebApi2官网学习记录---Cookie
Cookie的几个参数: Domain.Path.Expires.Max-Age 如果Expires与Max-Age都存在,Max-Age优先级高,如果都没有设置cookie会在会话结束后删除cook ...
- WebApi2官网学习记录---批量处理HTTP Message
原文:Batching Handler for ASP.NET Web API 自定义实现HttpMessageHandler public class BatchHandler : HttpMess ...
- WebApi2官网学习记录---Html Form Data
HTML Forms概述 <form action="api/values" method="post"> 默认的method是GET,如果使用GE ...
- WebApi2官网学习记录--HttpClient Message Handlers
在客户端,HttpClient使用message handle处理request.默认的handler是HttpClientHandler,用来发送请求和获取response从服务端.可以在clien ...
- WebApi2官网学习记录--HTTP Message Handlers
Message Handlers是一个接收HTTP Request返回HTTP Response的类,继承自HttpMessageHandler 通常,一些列的message handler被链接到一 ...
- WebApi2官网学习记录---Configuring
Configuration Settings WebAPI中的configuration settings定义在HttpConfiguration中.有一下成员: DependencyResolver ...
- WebApi2官网学习记录---单元测试
如果没有对应的web api模板,首先使用nuget进行安装 例子1: ProductController 是以硬编码的方式使用StoreAppContext类的实例,可以使用依赖注入模式,在外部指定 ...
- WebApi2官网学习记录---Tracing
安装追踪用的包 Install-Package Microsoft.AspNet.WebApi.Tracing Update-Package Microsoft.AspNet.WebApi.WebHo ...
- WebApi2官网学习记录---异常处理
HttpResponseException 当WebAPI的控制器抛出一个未捕获的异常时,默认情况下,大多数异常被转为status code为500的http response即服务端错误. Http ...
随机推荐
- mac os 10.10下安装android studio问题:android studio was unable to find a valid jvm
友情提示:小编在做到这一步前,已经确定jdk和环境变量已经安装并配置无误,关于怎么检查java环境变量请自行百度. 原因分析:android studio安装包下的info.plist配置文件中有个关 ...
- Android-为何以及如何保存Fragment实例
在安卓开发中,由于旋转设备会造成配置改变进而导致Activity实例被摧毁(当然也包括Activity托管的Fragment).Activity或Fragment实例被摧毁自然也就让Model被摧毁, ...
- java 修改文件名
// 修改文件名 public static boolean modifyFileName(String serverPath, String oldFileName, String newLogin ...
- Codeforces Round #279 (Div. 2)f
树形最大上升子序列 这里面的上生子序列logn的地方能当模板使 good #include<iostream> #include<string.h> #include< ...
- Altium Designer极坐标布局方法
1.键盘快捷组合 O+G,打开栅格管理器,点击左下角的“菜单”,在对话框中的选择“添加极坐标栅格”. 2.双击新添加的优先等级为1的栅格,在弹出的polar grid editor 对话框中,对里边 ...
- QT VS2008未处理的异常: 0xC0000005
症状如图所示 出错代码段在第3行 QString dir = QFileDialog::getExistingDirectory(this, tr("Save file path&qu ...
- css3中的提供的元素变化属性
通过 CSS3 提供的2d元素转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸. css3中为我们 提供了: translate() rotate() scale() skew() matrix( ...
- 【回忆1314】回忆之placeholder
直接看效果点这里 HTML <!DOCTYPE html> <html> <head lang="zh-CN"> <meta charse ...
- ECSTORE验证码优化
用ecstore的朋友应该知道,ecstore的验证码超级鸡肋. 特别是字母和数字混合,根本就看不懂写的是什么? 数字还好,但是字母就别提了.而且还小. 索性就把验证码换掉.研究一下发现,ecstor ...
- 解决IE10以下对象不支持“bind”属性或方法
IE10一下的浏览器,如果在JS代码中用了bind函数,那么就会报“SCRIPT438: 对象不支持“bind”属性或方法” 因为浏览器没有提供这个参数的方法,所以我们就自己写一个bind,来让这个参 ...