为Asp.Net Web Api添加Http基本认证
Asp.net Web Api提供了RESTFul web服务的编程接口。默认RESTFul 服务没有提供任何验证或者基于角色的验证,这显然不适合Put、Post、Delete这些操作。Aps.net MVC提供了认证过滤器,结合Http基本认证,可以很好的实现RESTFul服务的认证。选择Http基本认证有以下几个原因。
- Http & RESTFul是无状态的,每次请求都需要认证即需要提供认证消息。将这些信息放在HTTP头部是个不错的选择。
- Http基本认证逻辑清晰简单,配合HTTP响应码(401等)可以提供一个完整的认证逻辑。
- 配合部署Https,Http基本认证一样可以获得很高的安全性。
- 实现简单。
实现并测试认证过程需要在服务器端和客户端共同进行。两者均使用了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基本认证的更多相关文章
- 为IIS Host ASP.NET Web Api添加Owin Middleware
将OWIN App部署在IIS上 要想将Owin App部署在IIS上,只添加Package:Microsoft.OWIN.Host.SystemWeb包即可.它提供了所有Owin配置,Middlew ...
- asp.net web api添加统一异常处理
1.自定义异常处理过滤器 /// <summary> /// 自定义异常处理过滤器 /// </summary> public class CustomExceptionFil ...
- 自定义DelegatingHandler为ASP.NET Web Api添加压缩与解压的功能
HTTP协议中的压缩 Http协议中使用Accept-Encoding和Content-Encoding头来表示期望Response内容的编码和当前Request的内容编码.而Http内容的压缩其实是 ...
- Asp.net Web Api添加异常筛选器
一.定义一个异常筛选器 using System;using System.Collections.Generic;using System.Linq;using System.Web;using S ...
- Asp.Net MVC 4 Web API 中的安全认证-使用OAuth
各种语言实现的oauth认证: http://oauth.net/code/ 上一篇文章介绍了如何使用基本的http认证来实现asp.net web api的跨平台安全认证. 这里说明一个如何使用oa ...
- 用Middleware给ASP.NET Core Web API添加自己的授权验证
Web API,是一个能让前后端分离.解放前后端生产力的好东西.不过大部分公司应该都没能做到完全的前后端分离.API的实现方式有很 多,可以用ASP.NET Core.也可以用ASP.NET Web ...
- [转]用Middleware给ASP.NET Core Web API添加自己的授权验证
本文转自:http://www.cnblogs.com/catcher1994/p/6021046.html Web API,是一个能让前后端分离.解放前后端生产力的好东西.不过大部分公司应该都没能做 ...
- [水煮 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 自动地整合 ...
- [水煮 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 ...
随机推荐
- EasyUI ComboBox默认值
combobox数据加载完后设置默认值 $('#ck').combobox({ url: '/External/GetAllCk', valueField: 'Ddbh', textField: 'D ...
- cocos2d-x 二进制文件的读写
转自:http://blog.csdn.net/wolfking_2009/article/details/10616069 cocos2d-x里面的二进制文件读取的方法是有的,作者对方法封装了下,将 ...
- jQuery循环滚动新闻列表
最近由于项目原因,学习了下jquery,实现了一个小小的功能,就是点击公告的上一条下一条来查看滚动条.具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DT ...
- 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 ...
- 如何进行js动态生成option?如何实现二级连动?
何为二级连动? 首先要明白什么是二级连动!顾名思义,就是一个动,另外一个也跟着一起动 看下面的例子: 这里有一个“市级”的选择列表框,还有一个“县级”的选择列表框,如果“市级”的选择列表框中的值发现变 ...
- android开发环境 eclipse + android sdk配置笔记
本开发环境为:eclipse + android sdk,步骤说明的顺序,没有特别要求,看个人爱好了 步骤说明: 1.安装eclipse 2.配置jdk 3.安装android sdk 4.安装ADT ...
- RotateAnimation详解
其他构造器的旋转也可参考这副图. RotateAnimation旋转坐标系为以旋转点为坐标系(0,0)点.x轴为0度,顺时针方向旋转一定的角度. 1.RotateAnimation(fr ...
- iOS开发——实战总结OC篇&网易彩票开发知识点总结
网易彩票开发知识点总结 关于网易彩票开发中遇到了不少的坑,弄了好久才弄懂,或者有些犹豫很久没用就不记得了,所以这里就总结了一下,希望以后不会忘记,就算忘记也能快速查看! /************** ...
- 2sum、3sum、4sum以及任意连续的数的和为sum、任意连续或者不连续的数的和为sum
2sum 如果数组是无序的,先排序(n*logn),然后用两个指针i,j,各自指向数组的首尾两端,令i=0,j=n-1,然后i++,j--,逐次判断a[i]+a[j]?=sum,如果某一刻a[i]+a ...
- OpenResty(nginx扩展)实现防cc攻击
OpenResty(nginx扩展)实现防cc攻击 导读 OpenResty 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强 ...