Authentication(认证)

  WebAPI中的认证既可以使用HttpModel也可以使用HTTP message handler,具体使用哪个可以参考一下依据:

  1. 一个HttpModel可以检测ASP.NET请求管道中的所有请求,一个message handler仅仅可以检测到被路由到这个WebAPI的请求
  2. 可以预先设置message handlers,让特定的route使用指定的authentication scheme
  3. Http Module只能在IIS中使用,Message hans可以在任意ost-agnostic环境中使用(web-hosting和self-hosting)
  4. HTTP Module在IIS中参与登陆、审计等过程
  5. 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过滤器,可以通过继续AuthorizeAttributeAuthorizationFilterAttributeIAuthorizationFilter来实现,如果是cpu密集型的身份验证逻辑应使用同步的方式,如果是IO密集型的应使用异步方法。

AuthorizeAttribute的层级关系:

WebApi2官网学习记录--- Authentication与Authorization的更多相关文章

  1. WebApi2官网学习记录---Cookie

    Cookie的几个参数: Domain.Path.Expires.Max-Age 如果Expires与Max-Age都存在,Max-Age优先级高,如果都没有设置cookie会在会话结束后删除cook ...

  2. WebApi2官网学习记录---批量处理HTTP Message

    原文:Batching Handler for ASP.NET Web API 自定义实现HttpMessageHandler public class BatchHandler : HttpMess ...

  3. WebApi2官网学习记录---Html Form Data

    HTML Forms概述 <form action="api/values" method="post"> 默认的method是GET,如果使用GE ...

  4. WebApi2官网学习记录--HttpClient Message Handlers

    在客户端,HttpClient使用message handle处理request.默认的handler是HttpClientHandler,用来发送请求和获取response从服务端.可以在clien ...

  5. WebApi2官网学习记录--HTTP Message Handlers

    Message Handlers是一个接收HTTP Request返回HTTP Response的类,继承自HttpMessageHandler 通常,一些列的message handler被链接到一 ...

  6. WebApi2官网学习记录---Configuring

    Configuration Settings WebAPI中的configuration settings定义在HttpConfiguration中.有一下成员: DependencyResolver ...

  7. WebApi2官网学习记录---单元测试

    如果没有对应的web api模板,首先使用nuget进行安装 例子1: ProductController 是以硬编码的方式使用StoreAppContext类的实例,可以使用依赖注入模式,在外部指定 ...

  8. WebApi2官网学习记录---Tracing

    安装追踪用的包 Install-Package Microsoft.AspNet.WebApi.Tracing Update-Package Microsoft.AspNet.WebApi.WebHo ...

  9. WebApi2官网学习记录---异常处理

    HttpResponseException 当WebAPI的控制器抛出一个未捕获的异常时,默认情况下,大多数异常被转为status code为500的http response即服务端错误. Http ...

随机推荐

  1. 导出Exexcl类

    前台: <%@ Page Language="C#" AutoEventWireup="true" EnableEventValidation=" ...

  2. StringBuilder 大量字符串时使用,速度比较快

    public static void Main(string[] args) { Stopwatch sw = new Stopwatch(); //程序计时器 StringBuilder str = ...

  3. hdu5398 GCD Tree(lct)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud GCD Tree Time Limit: 5000/2500 MS (Java/O ...

  4. windows下安装phpcms html/ 文件夹不可写的一种错误以及解决方法

    朋友安装phpcms时遇到奇葩问题,环境搭建在windows7中,竟然出现 html/ 和 phpsso_server/caches/文件夹不可写问题(如图) 在windows下出现这种权限的问题真不 ...

  5. 【好程序员笔记分享】——UIView与CALayer详解

    -iOS培训,iOS学习-------型技术博客.期待与您交流!------------ UIView与CALayer详解 研究Core Animation已经有段时间了,关于Core Animati ...

  6. 我和小美的撸码日记(2)之第一个基于MVC+Jqgrid的列表页面

    一.前言 “尼玛哥,上周你教我改了下OA系统UI,黄总看了很满意呀.”    “不错不错,看来小美进步很大,可以提前结束试用期,到时候加工资别忘了请我吃饭呀!”    “尼玛哥,你有女朋友了吗?” “ ...

  7. webpack ,react

    一小时包教会 —— webpack 入门指南 http://***/Article/50764   ------------------ 轻松入门React和Webpack http://www.in ...

  8. nodejs javascript微信开发

    1.当从第三方软件需要分享到微信的时候 需要给授权处理才能获得微信信息 比如 nickname 等昵称图像等 从第三方登陆跳转到微信分享页需要 shareurl = http://open.weixi ...

  9. windows上putty访问ubuntu

    1. Ubuntu中安装ssh-server实现远程登录 a) 安装:sudo apt-get install openssh-server b) 开启服务:sudo /etc/init.d/ssh ...

  10. ActionBar +Tab+ViewPager +Fragment 支持侧滑动完成办税工具的页面展示

    1:fragment_zhqrl.xml(征期日历) <?xml version="1.0" encoding="utf-8"?> <Line ...