ASP.NET Web API(二):安全验证之使用HTTP基本认证

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 在前一篇文章ASP.NET Web API(一):使用初探,GET和POST数据中,我们初步接触了微软的REST API: Web API。 我们在接触了Web API的后就立马发现了有安全验证的需求,所以这篇文章我们先来讨论下安全验证一个最简单的方法:使用HTTP基本认证。

在前一篇文章ASP.NET Web API(一):使用初探,GET和POST数据中,我们初步接触了微软的REST API: Web API。

我们在接触了Web API的后就立马发现了有安全验证的需求,所以这篇文章我们先来讨论下安全验证一个最简单的方法:使用HTTP基本认证。

HTTP基本认证原理

在HTTP协议进行通信的过程中,HTTP协议定义了基本认证过程以允许HTTP服务器对WEB浏览器进行用户身份认证的方法,当一个客户端向HTTP服务器进行数据请求时,如果客户端未被认证,则HTTP服务器将通过基本认证过程对客户端的用户名及密码进行验证,以决定用户是否合法。

其基本的实现方式是:

客户端在用户输入用户名及密码后,将用户名及密码以BASE64加密,加密后的密文将附加于请求信息中,如当用户名为Parry,密码为123456时,客户端将用户名和密码用":"合并,并将合并后的字符串用BASE64加密,并于每次请求数据时,将密文附加于请求头(Request Header)中。

HTTP服务器在每次收到请求包后,根据协议取得客户端附加的用户信息(BASE64加密的用户名和密码),解开请求包,对用户名及密码进行验证,如果用户名及密码正确,则根据客户端请求,返回客户端所需要的数据;否则,返回错误代码或重新要求客户端提供用户名及密码。

Web API使用HTTP基本认证进行安全验证

我们还是基于前一篇文章的示例进行测试。

首先我们基于System.Web.Http.AuthorizeAttribute类实现一个HTTP基本认证的类,并实现两个方法:OnAuthorization和HandleUnauthorizedRequest。

添加一个类HTTPBasicAuthorizeAttribute,继承于System.Web.Http.AuthorizeAttribute,先来实现OnAuthorization。

 1  public  override  void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
 2 {
 3      if (actionContext.Request.Headers.Authorization !=  null)
 4     {
 5          string userInfo = Encoding.Default.GetString(Convert.FromBase64String(actionContext.Request.Headers.Authorization.Parameter));
 6          // 用户验证逻辑
 7           if ( string.Equals(userInfo,  string.Format( " {0}:{1} "" Parry "" 123456 ")))
 8         {
 9             IsAuthorized(actionContext);
10         }
11          else
12         {
13             HandleUnauthorizedRequest(actionContext);
14         }
15     }
16      else
17     {
18         HandleUnauthorizedRequest(actionContext);
19     }
20 }

actionContext.Request.Headers.Authorization.Parameter就是Client BASE64后的字符串,我们对其进行反编码后,为了测试方便只进行简单的用户验证,这里你可以引入自己系统的验证逻辑。

同时还要实现HandleUnauthorizedRequest以实现验证失败时继续提示验证,代码如下:

1  protected  override  void HandleUnauthorizedRequest(System.Web.Http.Controllers.HttpActionContext actionContext)
2 {
3      var challengeMessage =  new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
4     challengeMessage.Headers.Add( " WWW-Authenticate "" Basic ");
5      throw  new System.Web.Http.HttpResponseException(challengeMessage);
6 }

完成了此类后,只要在需要启用HTTP基本认证的Controller的类加上此属性即可,就像下面这样。

我们现在来测试验证过程。

当我们再来请求此API时,就会提示需要输入用户名和密码。

这时使用Fiddler进行抓包查看HTTP Header,就会发现了WWW-Authenticate的头。

在提供了正确的用户名和密码后,我们发现HTTP已将Parry:123456进行BASE64编码后的密文添加在了Request Header里面。

提交后成功地请求到了数据,如果输入的验证信息不正确,还是返回HTTP Status Code为401的未验证状态以继续验证。

输入正确的用户信息后请求到的数据。

HTTP基本认证的优缺点

优点是逻辑简单明了、设置简单。

缺点显而易见,即使是BASE64后也是可见的明文,很容易被破解、非法利用,使用HTTPS是一个解决方案。

还有就是HTTP是无状态的,同一客户端每次都需要验证。

针对这种情况,我们下一篇文章讨论下第二种验证方式:摘要认证(digest authentication)。

觉得文章还行的话就推荐下吧,哈哈。

源码下载

源代码下载 


作者:Parry
出处:http://www.cnblogs.com/parry/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

相关文章
|
23天前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
37 3
|
1月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
113 3
|
3月前
|
编解码 前端开发 JavaScript
.NET_web前端框架_layui_栅格布局
【8月更文挑战第27天】
47 4
|
11天前
|
缓存 安全 网络安全
HTTP/2与HTTPS在Web加速中的应用
HTTP/2与HTTPS在Web加速中的应用
|
24天前
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
24 3
|
1月前
|
安全 网络协议 算法
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
164 4
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
|
2月前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
|
2月前
|
开发框架 .NET 中间件
ASP.NET Core Web 开发浅谈
本文介绍ASP.NET Core,一个轻量级、开源的跨平台框架,专为构建高性能Web应用设计。通过简单步骤,你将学会创建首个Web应用。文章还深入探讨了路由配置、依赖注入及安全性配置等常见问题,并提供了实用示例代码以助于理解与避免错误,帮助开发者更好地掌握ASP.NET Core的核心概念。
100 3
|
2月前
|
开发框架 前端开发 .NET
VB.NET中如何利用ASP.NET进行Web开发
在VB.NET中利用ASP.NET进行Web开发是一个常见的做法,特别是在需要构建动态、交互式Web应用程序时。ASP.NET是一个由微软开发的开源Web应用程序框架,它允许开发者使用多种编程语言(包括VB.NET)来创建Web应用程序。
60 5
|
2月前
|
JavaScript 前端开发 API
JavaScript 验证 API
JavaScript 验证 API
28 2
下一篇
无影云桌面