尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
ASP.NET 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。1publicoverridevoidOnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)2{3if(actionContext.Request.Headers.Authorization !null)4{5stringuserInfo Encoding.Default.GetString(Convert.FromBase64String(actionContext.Request.Headers.Authorization.Parameter));6//用户验证逻辑7if(string.Equals(userInfo,string.Format({0}:{1},Parry,123456)))8{9IsAuthorized(actionContext);10}11else12{13HandleUnauthorizedRequest(actionContext);14}15}16else17{18HandleUnauthorizedRequest(actionContext);19}20}actionContext.Request.Headers.Authorization.Parameter就是Client BASE64后的字符串我们对其进行反编码后为了测试方便只进行简单的用户验证这里你可以引入自己系统的验证逻辑。同时还要实现HandleUnauthorizedRequest以实现验证失败时继续提示验证代码如下1protectedoverridevoidHandleUnauthorizedRequest(System.Web.Http.Controllers.HttpActionContext actionContext)2{3varchallengeMessage newSystem.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);4challengeMessage.Headers.Add(WWW-Authenticate,Basic);5thrownewSystem.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。觉得文章还行的话就推荐下吧哈哈。源码下载源代码下载
RELATED

相关推荐

[前端优化]使用Combres合并对js、css文件的请求

[前端优化]使用Combres合并对js、css文件的请求

在前端优化的各种金律铁规中,“减少客户端对资源的请求”都会在其中出现,刚好最近对网站做一些优化,使用了一下Combres组件,有点心得,遂整理成文。 园子中也有几篇Combres组件的介绍,如:Combres…

📅 2026/8/24 12:47:59
2025年Windows C++开发环境搭建:MSYS2 MinGW-w64与VSCode配置全攻略

2025年Windows C++开发环境搭建:MSYS2 MinGW-w64与VSCode配置全攻略

1. 项目概述:为什么2025年你还需要关注MinGW-w64?如果你在Windows上搞C开发,尤其是想尝鲜C20甚至未来标准的新特性,那么“开发环境”这四个字,大概率是你绕不开的第一个坎。Visual Studio固然强大,但动辄几…

📅 2026/8/24 12:48:00
Godot引擎体素模块入门:从零构建可编辑的3D体素世界

Godot引擎体素模块入门:从零构建可编辑的3D体素世界

1. 项目概述:为什么选择 Godot Voxel 模块? 如果你正在寻找一种既能快速上手,又能创造出独特视觉风格3D世界的方法,那么体素(Voxel)技术绝对值得你投入时间。体素,你可以把它理解为三维空间里的…

📅 2026/9/15 11:47:06
MORE NEWS

更多资讯

📰

三国志13下载报错多?一文搞懂5种方案

三国志13下载报错多?一文搞懂5种方案 官方文档太长抓不住重点,遇到《三国志13》下载或运行报错,直接翻几百页说明书简直是折磨。老玩家都知道,这游戏虽然经典,但兼容性坑多,从DLC缺失到DirectX报错,稍有不慎就得重装。别慌,这篇文章不…

📰

AI前端面试核心:SSE流式响应与TypeScript类型安全实战

1. 这不是鸡汤,是9月AI前端面试现场的真实切口“最后提醒一次,9月的AI前端面试不用太老实”——这句话刚在技术群刷屏时,我正帮一位三年经验的前端同学改简历。他把“熟练使用Vue3TypeScript”写了三遍,把“了解Webpack原理”当亮…

📰

Java开发环境配置避坑指南:5步搞定JDK与Maven最佳实践

Java开发环境配置避坑指南:5步搞定JDK与Maven最佳实践 配过Java环境的开发者都懂那种绝望感:下载JDK选错版本、环境变量PATH冲突、Maven仓库下载卡死,折腾一下午还没跑通Hello…

📰

2026年网站建设公司选择指南与技术趋势

1. 网站建设行业现状与选择标准2026年的网站建设市场已经呈现出明显的专业化、细分化趋势。根据我过去8年与超过200家建站公司打交道的经验,现在的企业客户不再满足于简单的"在线展示",而是追求"数字化业务中枢"。这意味着优秀的建站…

📰

层合板超声波仿真技术与COMSOL应用实践

1. 层合板超声波仿真基础解析层合板超声波仿真在无损检测领域扮演着关键角色,就像给复合材料做"CT扫描"。这种三明治结构(碳纤维/环氧树脂/芳纶纤维组合)在航空航天领域尤为常见,其声学特性直接影响结构健康监测的准确性…

📰

EPLAN端子排导航器:三层端子设计与数据闭环实战指南

1. 为什么端子排导航器是EPLAN电气设计里最被低估的“效率核弹”你有没有经历过这样的场景:一个中等规模的控制柜项目,端子数量刚过200个,图纸才画到第三张,就开始频繁切换窗口——在原理图里查线号,在端子排视图里找位…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬