Digest authentication

转载 2013年12月04日 10:09:07
“摘要”式认证( Digestauthentication)是一个简单的认证机制,最初是为HTTP协议开发的,因而也常叫做HTTP摘要,在RFC2671中描述。其身份验证机制很简单,它采用杂凑式(hash)加密方法,以避免用明文传输用户的口令。
摘要认证就是要核实,参与通信的双方,都知道双方共享的一个秘密(即口令)。

当服务器想要查证用户的身份,它产生一个摘要盘问(digestchallenge),并发送给用户。典型的摘要盘问如下:

Digest realm="iptel.org", qop="auth,auth-int",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", opaque="",algorithm=MD5

这里包括了一组参数,也要发送给用户。用户使用这些参数,来产生正确的摘要回答,并发送给服务器。摘要盘问中的各个参数,其意义如下:

realm(领域):领域参数是强制的,在所有的盘问中都必须有。它是目的是鉴别SIP消息中的机密。在SIP实际应用中,它通常设置为SIP代理服务器所负责的域名。

在要求用户输入用户名和口令时,SIP用户代理则会显示这个参数的内容给用户,以便用户使用正确的用户名和口令(这个服务器的)。

nonce(现时):这是由服务器规定的数据字符串,在服务器每次产生一个摘要盘问时,这个参数都是不一样的(与前面所产生的不会雷同)。“现时”通常是由一些数据通过md5杂凑运算构造的。这样的数据通常包括时间标识和服务器的机密短语。这确保每个“现时”都有一个有限的生命期(也就是过了一些时间后会失效,并且以后再也不会使用),而且是独一无二的(即任何其它的服务器都不能产生一个相同的“现时”)。

客户端使用这个“现时”来产生摘要响应(digestresponse),这样服务器也会在一个摘要响应中收到“现时”的内容。服务器先要检查了“现时”的有效性后,才会检查摘要响应的其它部分。

因而,“现时”在本质上是一种标识符,确保收到的摘要机密,是从某个特定的摘要盘问产生的。还限制了摘要盘问的生命期,防止未来的重播攻击。


opaque(不透明体):这是一个不透明的(不让外人知道其意义)数据字符串,在盘问中发送给用户。

在摘要响应中,用户会将这个数据字符串发送回给服务器。这使得服务器可以是无状态的。如果需要在盘问和响应之间维护一些状态,可以用这个参数传送状态给客户端,此后当摘要响应回来时,再读这个状态。

algorithm(算法):这是用来计算杂凑的算法。当前只支持MD5算法。

qop(保护的质量)。这个参数规定服务器支持哪种保护方案。客户端可以从列表中选择一个。值

“auth”表示只进行身份查验,“auth-int”表示进行查验外,还有一些完整性保护。需要看更详细的描述,请参阅RFC2617。

在收到了摘要盘问后,如果没有预先配置,用户代理软件通常会提示用户输入用户名和口令,产生一个摘要响应,并将这个响应发送给服务器。例如,摘要响应可能如下:

Digest username="jan", realm="iptel.org",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",uri="sip:iptel.org",
qop=auth, nc=00000001, cnonce="0a4f113b",
response="6629fae49393a05397450978507c4ef1", opaque=""

摘要响应类似于摘要盘问。相同的参数,则与摘要盘问有相同的意义。这里只描述新的参数:

uri(统一资源指示符):这个参数包含了客户端想要访问的URI。
qop:客户端选择的保护方式。
nc:“现时”计数器,这是一个16进制的数值,即客户端发送出请求的数量(包括当前这个请求),这

些请求都使用了当前请求中这个“现时”值。例如,对一个给定的“现时”值,在响应的第一个请求中,客户端将发送“nc=00000001”。这个指示值的目的,是让服务器保持这个计数器的一个副本,以便检测重复的请求。如果这个相同的值看到了两次,则这个请求是重复的。

cnonce:这也是一个不透明的字符串值,由客户端提供,并且客户端和服务器都会使用,以避免用明文文本。这使得双方都可以查验对方的身份,并对消息的完整性提供一些保护。

response(响应):这是由用户代理软件计算出的一个字符串,以证明用户知道口令。

当服务器接收到摘要响应,也要重新计算响应中各参数的值,并利用客户端提供的参数值,和服务器上存储的口令,进行比对。如果计算结果与收到的客户响应值是相同的,则客户已证明它知道口令,因而客户的身份验证通过。

HTTP Digest authentication

最近学习了HTTP Digest,并且分别在php和android实现了server端和服务器端逻辑
  • andrewpj
  • andrewpj
  • 2015年05月14日 23:04
  • 2827

digest鉴权

“摘要”式认证( Digest authentication)是一个简单的认证机制,最初是为HTTP协议开发的,因而也常叫做HTTP摘要,在RFC2671中描述。其身份验证机制很简单,它采用杂凑式(h...
  • Dev_Hanyu
  • Dev_Hanyu
  • 2015年08月19日 16:50
  • 1152

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

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

关于Basic,Digest and NTLM Authentication认证的问题

 本人要用Axis2 Webservice远程请求服务,而远程的服务是要通过Ntlm认证的,wsdl2java生成了一系列的代码,STUB也有,但是加上了NTLM认证,总是报以下错误: Java co...
  • minjiaren
  • minjiaren
  • 2009年08月20日 10:25
  • 909

Basic access authentication

Basic access authentication翻译于 [wiki]{https://en.wikipedia.org/wiki/Basic_access_authentication}在一个H...
  • Milk2015
  • Milk2015
  • 2016年08月04日 00:13
  • 179

IIS7.5 的安装以及配置

http://blog.163.com/kele_lipeng/blog/static/813452782010102692351327/原来地址 一、安装IIS 默认情况下,windows7安装...
  • ftzyelv
  • ftzyelv
  • 2012年11月28日 10:42
  • 7336

freeswitch 使用的问题

1.呼叫另一台主机的命令 originate sofia/external/1000@11.239.168.3 &echo 报错: [ERR] sofia_reg.c:2616 Cannot l...
  • luozirong
  • luozirong
  • 2017年11月24日 18:10
  • 109

Android学习记录(十二) http之base/digest鉴权。

说下背景,我们实现的http的文件下载是基于webdav协议的。 这个肯定是需要鉴权的~ android 5.1不再推荐使用apache的client,今天努力想尝试一下用httpurlconne...
  • yangchengtest
  • yangchengtest
  • 2016年05月04日 18:44
  • 1178

Spring Http Basic(基本)和Digest(摘要)验证

Basic(基本)和Digest(摘要)验证都是web应用中很受欢迎的可选机制。 Basic验证一般用来处理无状态的客户端,它们在每次请求都附带它们的证书。 很常见的用法是把它和基于表单的验证一起使用...
  • MrCharles
  • MrCharles
  • 2016年01月07日 12:46
  • 1358

zookeeper addauth

下载最新的稳定版zookeeper http://www.apache.org/dyn/closer.cgi/zookeeper/ 进入zookeeper/conf将zoo_sample....
  • zheng0518
  • zheng0518
  • 2015年03月31日 11:33
  • 7703
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Digest authentication
举报原因:
原因补充:

(最多只允许输入30个字)