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)

一、摘要认证由来

摘要认证是对基本认证的改进,即是用摘要代替账户密码,从而防止明文传输中账户密码的泄露

之前对摘要认证也不是很熟悉,还得感谢圆中的 parry 贡献的博文:ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)

我是觉得真心不错,让我少走很多弯路。这篇文章主要是对上边引用文章的讲解,老司机可以略过。

老规矩,上摘认证的工作流程图

看图大概可以知道摘要认证的步骤

1、客户端请求资源 api/employees,项目中即是点击details按钮

2、数据提交后,服务端检查Headers中的Authorization信息,null值就返回401,提示需要认证,认证格式为Digest,同时返回的还有realm、nonce、qop这几个参数值

2.1、realm的值可以随意;nonce为随机数,一般是GUID格式的字符串,需要后台返回;qop的之分布有三种:没有定义(即空值)、auth、auth-int

2.2、后台处理过程:

2.3、返回的报文头信息是这样:

HTTP /1.1 401 Unauthorized
WWW-Authenticate:Digest
realm= ”RealmOfBadri”
qop=“auth”
nonce=”75d1c31e6d3b28f100edac595a53cf96”

3、客户端接受到反馈后,知道资源需要授权才能访问;于是开始输入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运算

4、分析完前端,我们看看服务端如何解析这些参数的

其实服务端的工作就是根据客户端端传送过来的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权限认证:摘要认证(digest authentication)的更多相关文章

  1. Atitit HTTP 认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结

    Atitit HTTP认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结 1.1. 最广泛使用的是基本验证 ( ...

  2. [转]asp.net权限认证:摘要认证(digest authentication)

    本文转自:http://www.cnblogs.com/lanxiaoke/p/6357501.html 摘要认证简单介绍 摘要认证是对基本认证的改进,即是用摘要代替账户密码,从而防止明文传输中账户密 ...

  3. [转]ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)

    本文转自:http://www.cnblogs.com/parry/p/ASPNET_MVC_Web_API_digest_authentication.html 在前一篇文章中,主要讨论了使用HTT ...

  4. ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)

    在前一篇文章中,主要讨论了使用HTTP基本认证的方法,因为HTTP基本认证的方式决定了它在安全性方面存在很大的问题,所以接下来看看另一种验证的方式:digest authentication,即摘要认 ...

  5. 安全验证之使用摘要认证(digest authentication)

    安全验证之使用摘要认证(digest authentication) 在前一篇文章中,主要讨论了使用HTTP基本认证的方法,因为HTTP基本认证的方式决定了它在安全性方面存在很大的问题,所以接下来看看 ...

  6. Digest Authentication 摘要认证

    “摘要”式认证( Digest authentication)是一个简单的认证机制,最初是为HTTP协议开发的,因而也常叫做HTTP摘要,在RFC2671中描述.其身份验证机制很简单,它采用杂凑式(h ...

  7. ASP.NET Web API 安全验证之摘要(Digest)认证

    在基本认证的方式中,主要的安全问题来自于用户信息的明文传输,而在摘要认证中,主要通过一些手段避免了此问题,大大增加了安全性. 1.客户端匿名的方式请求 (无认证) HTTP/ Unauthorized ...

  8. asp.net权限认证:Windows认证

    asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...

  9. asp.net权限认证:Forms认证

    asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...

随机推荐

  1. spring mvc获取路径参数的几种方式 - 浅夏的个人空间 - 开源中国社区

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

  2. html5新增标签集锦

    <keygen></keygen><meter low="69" high="80" max="100" op ...

  3. 神经网络 Neuroph - Java Neural Network Platform Neuroph

    http://neuroph.sourceforge.net/image_recognition.html https://github.com/neuroph/neuroph

  4. (简单) POJ 2029 Get Many Persimmon Trees,暴力。

    Description Seiji Hayashi had been a professor of the Nisshinkan Samurai School in the domain of Aiz ...

  5. 对position的理解

    作者:zccst 先看看手册 值 描述 absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位. 元素的位置通过 "left", "t ...

  6. CSS 弹性盒子布局

    学习地址:https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Flexible_Box_Layout

  7. sql2000/sql2005/sql2008数据库变为0字节修复/MDF文件0字节恢复

    [数据恢复故障描述]  这个客户是生产型数据库,数据比较重要,产生量也比较大,客户要求必须尽快修复,保证生产尽快恢复运行.sql数据库文件,由于碎片链接过长,mdf文件突然变为0字节,开始客户尝试自行 ...

  8. pyv8安装

    http://www.thinksaas.cn/topics/0/400/400915.html

  9. PHP 性能追踪及分析工具(XHPROF)

    原文:https://gold.xitu.io/post/5860d23f128fe10069e1cfbf XHPROF:Facebook 开源的轻量级PHP性能分析工具. 它报告函数级别的请求次数和 ...

  10. shell相关命令

    1.shell是什么? 从用户角度:shell是用户与Linux沟通的桥梁 从程序员角度:shell本身是一种用C语言编写的程序 shell担任了翻译的角色,将用户输入的命令翻译成Linux能够识别的 ...