(Digest authentication)是一个简单的认证机制,最初是为HTTP协议开发的,因而也常叫做HTTP摘要,在RFC2671中描写叙述。其身份验证机制非常easy,它採用杂凑式(hash)加密方法,以避免用明文传输用户的口令。

摘要认证就是要核实,參与通信的两方,都知道两方共享的一个秘密(即口令)。

当server想要查证用户的身份,它产生一个摘要盘问(digest challenge),并发送给用户。典型的摘要盘问例如以下:

Digest realm="iptel.org", qop="auth,auth-int",

nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", opaque="", algorithm=MD5

这里包含了一组參数,也要发送给用户。用户使用这些參数,来产生正确的摘要回答,并发送给server。摘要盘问中的各个參数,其意义例如以下:

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

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

nonce(现时):这是由server规定的数据字符串,在server每次产生一个摘要盘问时,这个參数都是不一样的(与前面所产生的不会雷同)。“现时”一般是由一些数据通过md5杂凑运算构造的。

这种数据通常包含时间标识和server的机密短语。这确保每一个“现时”都有一个有限的生命期(也就是过了一些时间后会失效,并且以后再也不会使用),并且是独一无二的

(即不论什么其他的server都不能产生一个同样的“现时”)。

client使用这个“现时”来产生摘要响应(digest response),这样server也会在一个摘要响应中收到“现时”的内容。server先要检查了“现时”的有效性后,才会检查摘要响应的其他部分。

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

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

在摘要响应中,用户会将这个数据字符串发送回给server。这使得server能够是无状态的。假设须要在盘问和响应之间维护一些状态,能够用这个參数传送状态给client,此后当摘要响应回来时,再读这个状态。

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

qop(保护的质量)。这个參数规定server支持哪种保护方案。client能够从列表中选择一个。值

“auth”表示仅仅进行身份查验, “auth-int”表示进行查验外,另一些完整性保护。须要看更具体的描写叙述,请參阅RFC2617。

在收到了摘要盘问后,假设没有预先配置,用户代理软件一般会提示用户输入username和口令,产生一个摘要响应,并将这个响应发送给server。比如,摘要响应可能例如以下:

Digest username="jan", realm="iptel.org",

nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", uri="sip:iptel.org",

qop=auth, nc=00000001, cnonce="0a4f113b",

response="6629fae49393a05397450978507c4ef1", opaque=""

摘要响应相似于摘要盘问。同样的參数,则与摘要盘问有同样的意义。这里仅仅描写叙述新的參数:

uri(统一资源指示符):这个參数包括了client想要訪问的URI。

qop:client选择的保护方式。

nc:“现时”计数器,这是一个16进制的数值,即client发送出请求的数量(包含当前这个请求),这些请求都使用了当前请求中这个“现时”值。比如,对一个给定的“现时”值,在响应的第一个请求中,client将发送“nc=00000001”。这个指示值的目的,是让server保持这个计数器的一个副本,以便检測反复的请求。假设这个同样的值看到了两次,则这个请求是反复的。

cnonce:这也是一个不透明的字符串值,由client提供,而且client和server都会使用,以避免用明文文本。这使得两方都能够查验对方的身份,并对消息的完整性提供一些保护。

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

当server接收到摘要响应,也要又一次计算响应中各參数的值,并利用client提供的參数值,和server上存储的口令,进行比对。假设计算结果与收到的客户响应值是同样的,则客户已证明它知道口令,

因而客户的身份验证通过。`

HTTP Digest authentication的更多相关文章

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

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

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

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

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

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

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

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

  5. asp.net权限认证:摘要认证(digest authentication)

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

  6. Digest Authentication 摘要认证

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

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

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

  8. PYTHON实现HTTP摘要认证(DIGEST AUTHENTICATION)

    参考: http://blog.csdn.net/kiwi_coder/article/details/28677651 http://blog.csdn.net/gl1987807/article/ ...

  9. Http authentication(BASIC, DIGEST)

    Http authentication....BASIC: In the context of an HTTP transaction, basic access authentication is ...

随机推荐

  1. HDU 1813 Escape from Tetris (IDA*)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1813 题意:给你一个n*n的迷宫,其中0代表有一个人在这个位置,1代表墙,现在要求一个路线,使所有的人通 ...

  2. linux下查看文件及目录个数

    linux下查看文件及目录个数1.查看当前文件和目录总数(不包括子目录):ls -l | wc -l 2.查看当前目录下文件个数(不包括子目录):ls -l |grep "^-"| ...

  3. Toolbar 和 CollapsingToolbarLayout一起使用时menu item无点击反应解决办法

    昨天一直在琢磨为什么Toolbar和CollapsingToolbarLayout一起使用时menu item无点击放应的原因,后来在stackoverflow上一条回答,说可能是Toolbar的背景 ...

  4. C++服务器设计(零):总体设计

    这个系列把毕业论文的部分贴了出来,以作保存留念.整个系列分为三大部分,其中第一章到第三章是介绍服务器的系统层设计,设计思路参考了libevent和muduo等开源代码的实现:第四章到第六章是介绍服务器 ...

  5. 初识KMP

    KMP简介 KMP是一种由Knuth(D.E.Knuth).Morris(J.H.Morris)和Pratt(V.R.Pratt)设计的字符串匹配算法.对目标串T[0:n-1]中查找与之匹配的模式串P ...

  6. 新浪微博客户端开发之OAuth认证篇

    新浪微博客户端开发之OAuth认证篇 2013年7月29日新浪微博客户端开发 OAuth2.0授权机制我在这里就不浪费口舌了,有很多大牛都发表过相关的文章解释OAuth2.0认证的流程,我就随便找了一 ...

  7. java实现web文件无刷新上传

    最近在做如何实现文件上传的相关工作,查阅了很多资料,发现网上写的都不是很直观,且调试复杂,经实验成功. 把form的target设为页面里一个看不见的iframe,这样上传时候就不会刷新页面了,比如 ...

  8. CSS3动画之百度钱包

    百度钱包的步骤:1.建一个盒子,里面放两个盒子,代表正反面,两个盒子叠一起,正面层次高2.当鼠标Hover时,正面盒子从0deg->-180deg,反面盒子从-180deg->0deg3. ...

  9. css3属性:column分栏

    css3选择器中提出了分栏的属性,其浏览器支持情况为:Internet Explorer 10 和 Opera 支持 column 属性,Firefox 支持替代的 -moz-column 属性,Sa ...

  10. [C++程序设计]有关形参与实参,及返回值说明

    有关形参与实参的说明:(1) 在定义函数时指定的形参,在未出现函数调用 时,它们并不占内存中的存储单元,因此称它们是 形式参数或虚拟参数,表示它们并不是实际存在的数据,只有在发生函数调用时,函数max ...