[转]asp.net权限认证:摘要认证(digest authentication)
本文转自:http://www.cnblogs.com/lanxiaoke/p/6357501.html
摘要认证简单介绍
摘要认证是对基本认证的改进,即是用摘要代替账户密码,从而防止明文传输中账户密码的泄露
之前对摘要认证也不是很熟悉,还得感谢圆中的 parry 贡献的博文:ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)
我是觉得真心不错,让我少走很多弯路。这篇文章主要是对上边引用文章的讲解,老司机可以略过。
老规矩,上摘认证的工作流程图
看图大概可以知道摘要认证的步骤
客户端请求资源 api/employees
后台认证逻辑,返回401
数据提交后,服务端检查Headers中的Authorization信息,null值就返回401,提示需要认证,认证格式为Digest,同时返回的还有realm、nonce、qop这几个参数值
1、realm的值可以随意;nonce为随机数,一般是GUID格式的字符串,需要后台返回;qop的之分布有三种:没有定义(即空值)、auth、auth-int
2、后台处理过程:
3、返回的报文头信息是这样:
HTTP /1.1 401 Unauthorized
WWW-Authenticate:Digest
realm= ”RealmOfBadri”
qop=“auth”
nonce=”75d1c31e6d3b28f100edac595a53cf96”
客户端授权开始
接受到反馈后,知道资源需要授权才能访问;于是开始输入username、password
这里有个地方需要注意,项目默认是账户名密码一致才能验证通过的,看代码
点击登录,查看后台得到的数据
看图可以知道
realm、qop、nonce是服务器上次生成的值
username是我们输入的页面
uri是客户端要请求的地址
nc、cnonce是客户端自动生成的值
response是最终要传送的摘要信息,也是客户端生成的
是不是发现了什么不对?密码去哪了?
其实这就是摘要认证的精髓了,不传送明文密码,只传送摘要信息
有同学可能要问,不传输密码,那服务端如何知道输入的用户名称就是属于当前操作用户呢
那接下来就得摘要信息出场了,我们来看看如何生成摘要信息
对(username:realm:password)进行HASH运算,得到HA1
对(方法名:请求的路径)进行HASH运算,即(GET:http://localhost:32934/api/employees),得到HA2
最终得到摘要信息response = 对(HA1:nonce:nc:cnonce:qop:HA2)进行HASH运算
后台参数解析
分析完前端,我们看看服务端如何解析这些参数的
其实服务端的工作就是根据客户端端传送过来的realm、qop、nonce、username、uri、nc、cnonce进行HASH运行得到新的摘要信息response2
如何用response2与客户端生成的response进行比较,如果一致,就说明认证通过;不一致,就继续返回401
主要就是这一段代码处理
因为对于服务端来说HA1:nonce:nc:cnonce:qop:HA2中除了HA1中的password没有从客户端得到,其他所有所有参数都得到了
所以摘要认证的核心就是:
对于客户端:我知道用户名称和密码和(一些认证的约束,即realm、qop、nonce之类),从而得到加密信息response
对于服务端:我知道用户名称和(一些认证的约束,即realm、qop、nonce之类),然后根据用户名称去数据库找到用户的密码,从而得到加密信息response2
最后比较response:response2,如果客户端输入的密码和数据库根据用户名称查到的密码一致,就肯定能认证通过。
最后需要提醒大家的地方,这个用户密码可以跟账号登录密码不一致,可以分成2个字段;你可以理解为:用户名+认证密码
因为认证密码即使是加密的也必须可逆,不然后台匹配不了
摘要认证测试
web端的摘要认证就是上边那样。
但是很多情况客户端不是通过浏览器访问的资源,比如通过一段程序去访问 api/employees,
这时候并不存在像浏览器弹出认证窗口的交互动作,这时候怎么搞?
其实也是很简单的,我们新建控制台项目 DigestTest
然后通过WebClient对象去访问资源文件
最后运行程序,就可以看到返回的数据
提示未经授权,因为我们的认证账户是错的,改成1111:1111,再试试
OK,完全没有问题
好了,搞定收工!
asp.net权限认证系列
- asp.net权限认证:Forms认证
- asp.net权限认证:HTTP基本认证(http basic)
- asp.net权限认证:Windows认证
- asp.net权限认证:摘要认证(digest authentication)
- asp.net权限认证:OWIN实现OAuth 2.0 之客户端模式(Client Credential)
- asp.net权限认证:OWIN实现OAuth 2.0 之密码模式(Resource Owner Password Credential)
- asp.net权限认证:OWIN实现OAuth 2.0 之授权码模式(Authorization Code)
- asp.net权限认证:OWIN实现OAuth 2.0 之简化模式(Implicit)
转载于:https://www.cnblogs.com/freeliver54/p/6971286.html
[转]asp.net权限认证:摘要认证(digest authentication)相关推荐
- Java猿社区—Http digest authentication 请求代码最全示例
文章目录 什么是摘要认证 服务器核实用户身份 客户端反馈用户身份 server 确认用户 代码示例 欢迎关注作者博客 简书传送门 什么是摘要认证 摘要认证( Digest authentication ...
- asp.net权限认证:摘要认证(digest authentication)
摘要认证简单介绍 摘要认证是对基本认证的改进,即是用摘要代替账户密码,从而防止明文传输中账户密码的泄露 之前对摘要认证也不是很熟悉,还得感谢圆中的 parry 贡献的博文:ASP.NET Web AP ...
- [转]asp.net权限认证:HTTP基本认证(http basic)
本文转自:http://www.cnblogs.com/lanxiaoke/p/6353955.html HTTP基本认证示意图 HTTP基本认证,即http basic认证. 客户端向服务端发送一个 ...
- Digest Authentication 摘要认证(转载)
原文:Digest Authentication 摘要认证_weixin_34007906的博客-CSDN博客 摘要"式认证( Digest authentication)是一个简单的认证机 ...
- HTTP的认证方式之DIGEST 认证(摘要认证)
核心步骤: 步骤 1: 请求需认证的资源时,服务器会随着状态码 401Authorization Required,返回带WWW-Authenticate 首部字段的响应.该字段内包含质问响应方式认证 ...
- rtsp摘要认证协议(Response计算方法)
From: http://m.blog.csdn.net/blog/WTBEE/9001859 1. rtsp摘要认证协议流程 RTSP协议,全称Real Time Streaming Protoco ...
- WebApi接口安全认证——HTTP之摘要认证
摘要访问认证是一种协议规定的Web服务器用来同网页浏览器进行认证信息协商的方法.它在密码发出前,先对其应用哈希函数,这相对于HTTP基本认证发送明文而言,更安全.从技术上讲,摘要认证是使用随机数来阻止 ...
- RTSP鉴权认证之基础认证和摘要认证
RTSP认证类型 基本认证(basic authentication):http 1.0提出的认证方案,其消息传输不经过加密转换因此存在严重的安全隐患: 摘要认证(digest authenticat ...
- Httpclient处理摘要认证
虽然摘要认证的安全性比BASIC认证提高了不少,但是从接口调用上来看,并不比BASIC认证复杂,而且Realm和Scheme参数都可以为空,这时候就和BASIC认证的调用方式一模一样了. import ...
最新文章
- A Sequence-Based Novel Approach for Quality Evaluation of Third-Generation Sequencing Reads
- 一劳永逸-解决人类未来长期-暴露在病毒的方案-致所有中国的科技公司一封信
- ubuntu12.10 64位编译Android4.1
- mysql大表myisam的导入
- 美国总统就职演说词汇分布图
- 重读经典:《Deep Residual Learning for Image Recognition》
- Node.js下载安装及各种npm、nvm、nrm配置(保姆式教程---提供全套安装包)---node.js的安装与配置(1)
- caption重要性 image_Multimodal —— 看图说话(Image Caption)任务的论文笔记(一)评价指标和NIC模型...
- kinectfusion解析_KinectFusion解析
- Fabric CA 官方用户指南(中文版)
- 在代码里面如何使用workman
- 动态inventory
- 智能设计|零基础,低成本,轻松实现设计效率翻倍
- 一个APP诞生的自述日记,APP开发流程
- Pebble/RocksDB SST 文件详解
- 金茂服务香港上市破发:大跌29% 公司市值52亿港元
- 微软重申人工智能将增强人类体验而不是取而代之
- SSM电影院购票网站
- 聚二甲基硅氧烷消泡剂选好了,但他们的效果是一样?
- Opencv从0到1------利用白话文和你一起学cv(第二章)