Asp.net Web Api提供了RESTFul web服务的编程接口。默认RESTFul 服务没有提供任何验证或者基于角色的验证,这显然不适合Put、Post、Delete这些操作。Aps.net MVC提供了认证过滤器,结合Http基本认证,可以很好的实现RESTFul服务的认证。选择Http基本认证有以下几个原因。

  1. Http & RESTFul是无状态的,每次请求都需要认证即需要提供认证消息。将这些信息放在HTTP头部是个不错的选择。
  2. Http基本认证逻辑清晰简单,配合HTTP响应码(401等)可以提供一个完整的认证逻辑。
  3. 配合部署Https,Http基本认证一样可以获得很高的安全性。
  4. 实现简单。

实现并测试认证过程需要在服务器端和客户端共同进行。两者均使用了Http Authorization字段,在服务器端读取该字段,获取认证信息;在客户端写入该字段,设置认证信息。

1.  Web Api端(服务器)

Http基本认证只需要添加新的认证过滤属性。该属性类继承自 System.Web.Http.AuthorizeAttribute,在 IsAuthorized(...)方法中读取Http 头部Authorization字段及其值,进行自定义验证。

    /// <summary>
/// 基本用户认证过滤器
/// </summary>
public class HttpBasicAuthAttribute : System.Web.Http.AuthorizeAttribute
{ public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
} protected override bool IsAuthorized(HttpActionContext actionContext)
{
d.WriteLine($"{actionContext.Request.Headers}");
var headers = actionContext.Request.Headers;
if (headers.Authorization == null)
return false; var auth = headers.Authorization;
d.WriteLine($"auth type={auth.Scheme},Parameter={auth.Parameter}");
//auth.schema is Basic type, auth.Parameter is Base64 encoded string.
//do user auth() here ...
return true;
}
}

在App_Start/WebApiConfig.cs中添加该认证过滤器。

public static void Register(HttpConfiguration config)
{
// Web API 配置和服务
// 将 Web API 配置为仅使用不记名令牌身份验证。
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
config.Filters.Add(new HttpBasicAuthAttribute());
    }

2. Client

使用HttpWebRequest类构造自定义Http请求,写入头部Authorization字段的认证信息——使用了Basic认证,账号密码格式为"账号:密码"的Base64编码串。

       public void PostToWes()
{
       request.Method = @"Post";
request.ContentType = @"application/json";
request.ContentLength = json.Length;
request.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequired; var base64 = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes($"test001:123456"));
request.Headers["Authorization"] = $"Basic {base64}";
var data = ASCIIEncoding.ASCII.GetBytes(json);
using (var stream = request.GetRequestStream())
{
stream.Write(data, , data.Length);
}
}

Http基本认证在头部相当于明文传递了账号密码,如果觉得不太安全,最简单的方法就是使用Https了。

参考
1. Http 基本认证, https://zh.wikipedia.org/wiki/HTTP%E5%9F%BA%E6%9C%AC%E8%AE%A4%E8%AF%8
2. Https配置, https://support.microsoft.com/zh-cn/kb/324069
3. RESST, https://zh.wikipedia.org/wiki/REST

为Asp.Net Web Api添加Http基本认证的更多相关文章

  1. 为IIS Host ASP.NET Web Api添加Owin Middleware

    将OWIN App部署在IIS上 要想将Owin App部署在IIS上,只添加Package:Microsoft.OWIN.Host.SystemWeb包即可.它提供了所有Owin配置,Middlew ...

  2. asp.net web api添加统一异常处理

    1.自定义异常处理过滤器 /// <summary> /// 自定义异常处理过滤器 /// </summary> public class CustomExceptionFil ...

  3. 自定义DelegatingHandler为ASP.NET Web Api添加压缩与解压的功能

    HTTP协议中的压缩 Http协议中使用Accept-Encoding和Content-Encoding头来表示期望Response内容的编码和当前Request的内容编码.而Http内容的压缩其实是 ...

  4. Asp.net Web Api添加异常筛选器

    一.定义一个异常筛选器 using System;using System.Collections.Generic;using System.Linq;using System.Web;using S ...

  5. Asp.Net MVC 4 Web API 中的安全认证-使用OAuth

    各种语言实现的oauth认证: http://oauth.net/code/ 上一篇文章介绍了如何使用基本的http认证来实现asp.net web api的跨平台安全认证. 这里说明一个如何使用oa ...

  6. 用Middleware给ASP.NET Core Web API添加自己的授权验证

    Web API,是一个能让前后端分离.解放前后端生产力的好东西.不过大部分公司应该都没能做到完全的前后端分离.API的实现方式有很 多,可以用ASP.NET Core.也可以用ASP.NET Web ...

  7. [转]用Middleware给ASP.NET Core Web API添加自己的授权验证

    本文转自:http://www.cnblogs.com/catcher1994/p/6021046.html Web API,是一个能让前后端分离.解放前后端生产力的好东西.不过大部分公司应该都没能做 ...

  8. [水煮 ASP.NET Web API2 方法论](1-1)在MVC 应用程序中添加 ASP.NET Web API

    问题 怎么样将 Asp.Net Web Api 加入到现有的 Asp.Net MVC 项目中 解决方案 在 Visual Studio 2012 中就已经把 Asp.Net Web Api 自动地整合 ...

  9. [水煮 ASP.NET Web API2 方法论](1-2)在 WebForm 应用程序中添加 ASP.NET Web API

    问题 怎么样将 Asp.Net Web Api 加入到 Asp.Net Web From 应用程序中 解决方案 在 Visual Studio 2013 中,创建新的 Web From,可以直接在&q ...

随机推荐

  1. Giraph之SSSP(shortest path)单机伪分布运行成功

    所遇问题:Exception 1: Exception in thread "main" java.lang.IllegalArgumentException: "che ...

  2. Quartz.NET 2.0 学习笔记(1) :Quartz.NET简介

    http://www.cnblogs.com/lzrabbit/archive/2012/04/13/2447609.html

  3. android 动画属性(一)之Animation

    Animation 在android 程序当中很多时候要用到动画效果,而动画效果主要是Animation来实现的,API给出的解释: 其中包含4种动画效果 AlphaAnimation 渐变透明度 R ...

  4. js 浮点小数计算精度问题 parseFloat 精度问题

    在js中进行以元为单位进行金额计算时 使用parseFloat会产生精度问题 var price = 10.99; var quantity = 7; var needPay = parseFloat ...

  5. Ext_两种处理服务器端返回值的方式

    1.Form表单提交返回值处理 //提交基本信息表单  f.form.submit({      clientValidation:true,      //表单提交后台处理地址      url:' ...

  6. IDA Script: Remove empty auto labels

    http://simeonpilgrim.com/blog/2010/03/25/ida-script-remove-empty-auto-labels/ #include <idc.idc&g ...

  7. 【HTML】Jquery前台传参及接收

    在一些网页应用中,有的时候需要前台之间传递参数,通过JS语法来做一些判断处理. 发送端:(a页面) <a href="b.html?Show=true" id="t ...

  8. Codeforces Round #260 (Div. 1) D. Serega and Fun 分块

    D. Serega and Fun Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/455/pro ...

  9. 安卓高手之路之 WindowManager

    安卓中的画面不是纯粹由window组成.而是改成了window+view的组织模式.window是一个顶层窗口的概念.view就相当于在window内的控件.而subwindow则是依附于window ...

  10. mysql开启慢查询方法(转)

    1,配置开启 Linux: 在mysql配置文件my.cnf中增加 log-slow-queries=/var/lib/mysql/slowquery.log (指定日志文件存放位置,可以为空,系统会 ...