ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)
在前一篇文章中主要讨论了使用HTTP基本认证的方法因为HTTP基本认证的方式决定了它在安全性方面存在很大的问题所以接下来看看另一种验证的方式digest authentication即摘要认证。系列文章列表ASP.NET Web API一使用初探GET和POST数据ASP.NET Web API二安全验证之使用HTTP基本认证ASP.NET Web API三安全验证之使用摘要认证(digest authentication)摘要认证原理在基本认证的方式中主要的安全问题来自于用户信息的明文传输而在摘要认证中主要通过一些手段避免了此问题大大增加了安全性。下图为摘要验证的验证原理流程图。下面大致看一下这部分的验证流程客户端请求 /api/employees服务端返回401未验证的状态并且在返回的信息中包含了验证方式Digestrealm的值QOP(quality of protection)只设置成authnonce为一串随机值在下面的请求中会一直使用到当过了存活期后服务端将刷新生成一个新的nonce值客户端接受到请求返回后将username:realm:password进行HASH运算假设运算后的值为HA1。又将请求的路径/api/employees进行HASH运算假设运算后的值为HA2。再将HA1:nonce:nc:cnonce:qop:HA2进行HASH运算得到的值放在response中。这里的cnonce为客户端生成的nonce值而nc用于统计假设开始时为00000001下次请求后就变成了00000002不一定每次都加1但是后面请求中的nc值肯定大于前一次请求中的nc值。服务端收到请求后将验证nonce是否过期如果过期那么直接返回401即第二步的状态。如果没有过期那么比较nc值如果比前一次nc值小或者前一次根本没有存储的nc值那么也将直接返回401状态。如果前面的验证都通过那么服务端也将按照步骤3中计算最终HASH值的步骤计算出HASH值与客户端的进行比较然后比较客户端提交过来的HASH值与服务端计算出来的HASH进行比较不匹配返回401匹配获取请求的数据并返回状态200。摘要验证主要就是通过上面的HASH比较的步骤避免掉了基本验证中的安全性问题。需要注意的是如果需要IIS支持摘要验证需要把IIS摘要验证的特性勾上。摘要验证的实现在理解了摘要验证的原理之后只需要用代码实现即可。判断nonce是否过期的方法。1publicstaticboolIsValid(stringnonce,stringnonceCount)2{3Tupleint, DateTime cachedNonce null;4nonces.TryGetValue(nonce,outcachedNonce);56if(cachedNonce !null)//nonce is found7{8//nonce count is greater than the one in record9if(Int32.Parse(nonceCount) cachedNonce.Item1)10{11//nonce has not expired yet12if(cachedNonce.Item2 DateTime.Now)13{14//update the dictionary to reflect the nonce count just received in this request15nonces[nonce] newTupleint, DateTime(Int32.Parse(nonceCount),16cachedNonce.Item2);1718//Every thing looks ok - server nonce is fresh and nonce count seems to be19//incremented. Does not look like replay.20returntrue;21}22}23}2425returnfalse;26}判断nonce是否过期的代码下面为摘要验证实现的核心方法1namespaceDigestAuthentication2{3publicclassAuthenticationHandler : DelegatingHandler4{5protectedasyncoverrideTaskHttpResponseMessageSendAsync(HttpRequestMessage request, CancellationToken cancellationToken)6{7try8{9varheaders request.Headers;10if(headers.Authorization !null)11{12Header header newHeader(request.Headers.Authorization.Parameter,13request.Method.Method);1415if(Nonce.IsValid(header.Nonce, header.NounceCounter))16{17//Just assuming password is same as username for the purpose of illustration18stringpassword header.UserName;1920stringha1 String.Format({0}:{1}:{2}, header.UserName, header.Realm,21password).ToMD5Hash();2223stringha2 String.Format({0}:{1}, header.Method, header.Uri).ToMD5Hash();2425stringcomputedResponse String26.Format({0}:{1}:{2}:{3}:{4}:{5},27ha1, header.Nonce, header.NounceCounter,28header.Cnonce,auth, ha2).ToMD5Hash();2930if(String.CompareOrdinal(header.Response, computedResponse) 0)31{32//digest computed matches the value sent by client in the response field.33//Looks like an authentic client! Create a principal.34varclaims newListClaim35{36newClaim(ClaimTypes.Name, header.UserName),37newClaim(ClaimTypes.AuthenticationMethod, AuthenticationMethods.Password)38};3940varprincipal newClaimsPrincipal(new[] {newClaimsIdentity(claims,Digest) });4142Thread.CurrentPrincipal principal;4344if(HttpContext.Current !null)45HttpContext.Current.User principal;46}47}48}4950varresponse awaitbase.SendAsync(request, cancellationToken);5152if(response.StatusCode HttpStatusCode.Unauthorized)53{54response.Headers.WwwAuthenticate.Add(newAuthenticationHeaderValue(Digest,55Header.UnauthorizedResponseHeader.ToString()));56}5758returnresponse;59}60catch(Exception)61{62varresponse request.CreateResponse(HttpStatusCode.Unauthorized);63response.Headers.WwwAuthenticate.Add(newAuthenticationHeaderValue(Digest,64Header.UnauthorizedResponseHeader.ToString()));6566returnresponse;67}68}69}7071}摘要验证实现的核心方法实现完成后使用摘要验证只需要在对应的方法加上[Authorize]属性标签即可。摘要验证的优缺点摘要验证很好地解决了使用基本验证所担心的安全性问题。但是永远没有绝对的安全当用户使用字典进行穷举破解时还是会存在一些被破解的隐患。源码下载编辑器里怎么找不到上传文件的地方了我上传到了百度网盘里。源代码下载

相关新闻

RAG 召回率 95% 却答非所问?优先级冲突消解实测:3 种策略与 1 个弃用方案

RAG 召回率 95% 却答非所问?优先级冲突消解实测:3 种策略与 1 个弃用方案

RAG系统文档冲突问题深度解析与解决方案 问题背景与影响分析 昨晚排查生产环境RAG系统时,发现一个值得警惕的现象:用户查询"2026年Taotoken API流量包计费规则"时,系统虽然召回了4份高度相关的文档(召回率高达95%&…

2026/8/3 19:07:59 阅读更多 →
调参3个月才发现:过拟合修复只加L2正则化是错的,偏差-方差诊断才是关键

调参3个月才发现:过拟合修复只加L2正则化是错的,偏差-方差诊断才是关键

从92%训练准确率到25%测试集的思考:一个机器学习菜鸟的觉醒之路 第一次在真实数据集上跑出92%的训练准确率时,那种兴奋感至今难忘。但当我看到测试集仅25%的惨淡结果时,整个人都懵了——这不是教科书里标准的过拟合案例吗?作为一…

2026/8/3 19:07:59 阅读更多 →
Unity透明视频播放全攻略:AVPro Video插件在URP下的实战解析

Unity透明视频播放全攻略:AVPro Video插件在URP下的实战解析

1. 项目概述:为什么Unity中的透明视频播放是个“技术活”? 在Unity项目里,尤其是做UI特效、AR/VR交互或者一些需要将动态视频与3D场景无缝融合的场合,直接播放一个带透明通道的视频(比如一个动态的烟雾、火焰、Logo光效…

2026/8/3 19:07:59 阅读更多 →

最新新闻

Visual Syslog Server:Windows平台企业级日志集中管理解决方案

Visual Syslog Server:Windows平台企业级日志集中管理解决方案

Visual Syslog Server:Windows平台企业级日志集中管理解决方案 【免费下载链接】visualsyslog Syslog Server for Windows with a graphical user interface 项目地址: https://gitcode.com/gh_mirrors/vi/visualsyslog 在复杂的网络环境中,Unix/…

2026/8/3 19:53:20 阅读更多 →
免费LLM API资源宝库:打破AI开发成本壁垒的终极指南

免费LLM API资源宝库:打破AI开发成本壁垒的终极指南

免费LLM API资源宝库:打破AI开发成本壁垒的终极指南 【免费下载链接】free-llm-api-resources A list of free LLM inference resources accessible via API. 项目地址: https://gitcode.com/GitHub_Trending/fre/free-llm-api-resources 还在为AI开发的高昂…

2026/8/3 19:53:20 阅读更多 →
Wandb_Tutorial与PyTorch无缝集成:训练过程监控与模型性能分析实战

Wandb_Tutorial与PyTorch无缝集成:训练过程监控与模型性能分析实战

Wandb_Tutorial与PyTorch无缝集成:训练过程监控与模型性能分析实战 【免费下载链接】Wandb_Tutorial How to use wandb? 项目地址: https://gitcode.com/gh_mirrors/wa/Wandb_Tutorial Wandb_Tutorial是一个专注于指导开发者如何使用Weights & Biases&a…

2026/8/3 19:53:20 阅读更多 →
父母一方不陪同出境?出行同意书公证线上远程视频办理攻略(附材料清单)

父母一方不陪同出境?出行同意书公证线上远程视频办理攻略(附材料清单)

摘要不少家长计划单独带未成年人出境旅游、游学、探亲时,都会遇到出行同意书公证的办理难题。当父母其中一方无法随行出境,多数境外目的地、航司、边检机构会要求提供不随行家长签署并公证的出行同意文件。传统线下公证需要双方到场,异地、分…

2026/8/3 19:53:20 阅读更多 →
VSCode终端配置PyTorch环境:跨平台小白指南

VSCode终端配置PyTorch环境:跨平台小白指南

1. 项目缘起:为什么要在VSCode终端里搞PyTorch? 如果你刚开始接触深度学习,或者从其他IDE(比如PyCharm)转过来,可能会觉得在VSCode里配置PyTorch环境有点绕。网上教程要么是纯命令行的,要么是纯…

2026/8/3 19:53:20 阅读更多 →
终极指南:如何用免费开源工具轻松下载Fantia所有内容

终极指南:如何用免费开源工具轻松下载Fantia所有内容

终极指南:如何用免费开源工具轻松下载Fantia所有内容 【免费下载链接】fantiadl Download posts and media from Fantia 项目地址: https://gitcode.com/gh_mirrors/fa/fantiadl 你是否经常在Fantia上发现喜欢的创作者内容,却苦于无法高效保存&am…

2026/8/3 19:52:19 阅读更多 →

日新闻

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

PC服务器具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构一、前言:具身智能需要“混合算力闭环系统”传统人工智能依赖云端静态数据集训练,不具备物理交互能力,无法适应真实世界的不确定性。具身智能(Embodied…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

前言构建机器人、具身智能这类分布式实时系统,通信底座直接决定整套系统的实时性、容错性、组网能力。分布式领域长期存在 4 类经典通信架构:点对点模式、Broker 中间代理模式、广播模式、以数据为中心(DDS)模式。很多开发者疑惑&…

2026/8/3 0:00:47 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/3 4:58:13 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/3 1:53:31 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/3 4:36:35 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/3 13:07:03 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/3 5:19:38 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/3 8:27:36 阅读更多 →