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. Ehcache详细解读

    [http://raychase.iteye.com/blog/1545906]   Ehcache 是现在最流行的纯Java开源缓存框架. [通过编程方式使用EhCache ]   //从class ...

  2. SVN安装与使用

    来自:http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html SVN服务器搭建和使用(一) Subversion是优秀的版 ...

  3. InteractivePNG

    在as3中很多时候需要只能选中png中可视区域,即透明区域“感觉可以穿透”.

  4. C#获取程序集的版本号和最后编译时间

    C#获取程序集的版本号:string ver = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToStrin ...

  5. Instant Buy Android API Tutorial

    转自:https://developers.google.com/wallet/instant-buy/android/tutorial This tutorial guides you throug ...

  6. c# asp.net 鼠标改变控件坐标位置,更改控件坐标,注册表保存读取,打印,查找局域网内打印机等等收集

    界面虽然被我弄的很难看,但功能还可以 里边注册表的路径自己设置一下,或者加一个创建注册表的语句,不然会报错 前台: <%@ Page Language="C#" AutoEv ...

  7. cdoj 1131 男神的礼物 区间dp

    男神的礼物 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1131 Descr ...

  8. 使用Ant命令压缩JavaScript文件

    压缩JavaScript文件可以减少代码尺寸,保护源代码,节省网络带宽,加快页面打开速度,甚至优化JS代码.Yahoo有一个压缩JS的工具叫做YUI compressor, Google也有一个工具叫 ...

  9. Xcode快照——管理应用程序版本

    转自:http://blog.csdn.net/yuanbohx/article/details/8919474 1.创建快照:FIle → Create Snapshot 2.查看快照:Window ...

  10. mkinitrd---简单介绍

    转载:http://blog.csdn.net/zwcq82/article/details/4295481 原来对mkinitrd不是很了解.最近做内核升级,需要制作信息的initrd文件,发现出错 ...