HTTP Authorization 之 Digest Auth

一眠砾、簡(jiǎn)介

摘要訪問(wèn)認(rèn)證是一種協(xié)議規(guī)定的Web服務(wù)器用來(lái)同網(wǎng)頁(yè)瀏覽器進(jìn)行認(rèn)證信息協(xié)商的方法。它在密碼發(fā)出前阅虫,先對(duì)其應(yīng)用哈希函數(shù)演闭,這相對(duì)于HTTP基本認(rèn)證發(fā)送明文而言,更安全颓帝。
  從技術(shù)上講米碰,摘要認(rèn)證是使用隨機(jī)數(shù)來(lái)阻止進(jìn)行密碼分析的MD5加密哈希函數(shù)應(yīng)用窝革。它使用HTTP協(xié)議。
  
  個(gè)人理解:HTTP Digest Auth 是對(duì) HTTP Basic Auth 的增強(qiáng)吕座。由于 HTTP Basic Auth 幾乎是以明文傳輸用戶名和密碼虐译,容易泄露。而 HTTP Digest Auth 能夠傳遞認(rèn)證信息吴趴,但是傳遞的是使用摘要算法(如:MD5)產(chǎn)生的密文菱蔬,服務(wù)端也不用存儲(chǔ)明文用戶信息,降低了泄密的可能性史侣。但是這種方式仍然可以通過(guò)中間人攻擊的方式攔截、模擬魏身,所以算是一種折中方案惊橱。
    
  這里只做個(gè)簡(jiǎn)要描述,說(shuō)明總體原理箭昵,詳情請(qǐng)查閱文檔税朴。

二、原理

摘要訪問(wèn)認(rèn)證最初由RFC 2069 (HTTP的一個(gè)擴(kuò)展:摘要訪問(wèn)認(rèn)證)中被定義家制。RFC 2069 大致定義了一個(gè)傳統(tǒng)的由服務(wù)器生成隨機(jī)數(shù)來(lái)維護(hù)安全性的摘要認(rèn)證架構(gòu)正林。認(rèn)證響應(yīng)由下列組成(HA1、HA2颤殴、A1觅廓、及A2為字符串變量的名稱):



這只是最基本的情況,為了防止中間人攻擊涵但,增加安全性杈绸,還有其他選項(xiàng),不過(guò)這些都不影響總體原理矮瘟。

三瞳脓、示例及說(shuō)明

下面的例子出自 RFC 2617,在這里進(jìn)行了擴(kuò)展澈侠,對(duì)每一個(gè)請(qǐng)求和響應(yīng)顯示出完整的文本劫侧。注意,這里僅僅涵蓋了“auth”保護(hù)質(zhì)量的代碼哨啃,因?yàn)樵谧珜懫陂g烧栋,所知道的只有OperaKonqueror網(wǎng)頁(yè)瀏覽器支持“auth-int”(帶完整性保護(hù)的認(rèn)證)。雖然定義中提到了HTTP 1.1棘催,但是該構(gòu)架可以像下面所描述的這樣添加到1.0的服務(wù)器中去劲弦。

典型的認(rèn)證過(guò)程包括如下步驟。

  • 客戶端請(qǐng)求一個(gè)需要認(rèn)證的頁(yè)面醇坝,但是不提供用戶名密碼邑跪。通常這是由于用戶簡(jiǎn)單的輸入了一個(gè)地址或者在頁(yè)面中點(diǎn)擊了某個(gè)超鏈接次坡。
  • 服務(wù)器返回401 "Unauthorized" 響應(yīng)代碼,并提供認(rèn)證域(realm)画畅,以及一個(gè)隨機(jī)生成的砸琅、只使用一次的數(shù)值,稱為密碼隨機(jī)數(shù) nonce轴踱。
  • 此時(shí)症脂,瀏覽器會(huì)向用戶提示認(rèn)證域(realm)(通常是所訪問(wèn)的計(jì)算機(jī)或系統(tǒng)的描述),并且提示用戶名和密碼淫僻。用戶此時(shí)可以選擇取消诱篷。
  • 一旦提供了用戶名和密碼,客戶端會(huì)重新發(fā)送同樣的請(qǐng)求雳灵,但是添加了一個(gè)認(rèn)證頭包括了響應(yīng)代碼棕所。
  • 在這個(gè)例子中,服務(wù)器接受了認(rèn)證并且返回了請(qǐng)求頁(yè)面悯辙。如果用戶名非法和/或密碼不正確琳省,服務(wù)器將返回"401"響應(yīng)代碼,然后客戶端會(huì)再次提示用戶輸入用戶名及密碼躲撰。

注意:客戶端可能已經(jīng)擁有了用戶名和密碼针贬,因此不需要提示用戶,比如以前存儲(chǔ)在瀏覽器里的拢蛋。

客戶端請(qǐng)求 (無(wú)認(rèn)證)

GET /dir/index.html HTTP/1.0
Host: localhost

(跟隨一個(gè)新行桦他,形式為一個(gè)回車再跟一個(gè)換行)

服務(wù)器響應(yīng)

HTTP/1.0 401 Unauthorized
Server: HTTPd/0.9
Date: Sun, 10 Apr 2005 20:26:47 GMT
WWW-Authenticate: Digest realm="testrealm@host.com",
                        qop="auth,auth-int",
                        nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
                        opaque="5ccc069c403ebaf9f0171e9517f40e41"
Content-Type: text/html
Content-Length: 311

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML>
  <HEAD>
    <TITLE>Error</TITLE>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
  </HEAD>
  <BODY><H1>401 Unauthorized.</H1></BODY>
</HTML>

客戶端請(qǐng)求 (用戶名 "Mufasa", 密碼 "Circle Of Life")

GET /dir/index.html HTTP/1.0
Host: localhost
Authorization: Digest username="Mufasa",
                     realm="testrealm@host.com",
                     nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
                     uri="/dir/index.html",
                     qop=auth,
                     nc=00000001,
                     cnonce="0a4f113b",
                     response="6629fae49393a05397450978507c4ef1",
                     opaque="5ccc069c403ebaf9f0171e9517f40e41"

(跟隨一個(gè)新行,形式如前所述).
服務(wù)器響應(yīng)

HTTP/1.0 200 OK
Server: HTTPd/0.9
Date: Sun, 10 Apr 2005 20:27:03 GMT
Content-Type: text/html
Content-Length: 7984

(隨后是一個(gè)空行谆棱,然后是所請(qǐng)求受限制的HTML頁(yè)面).


如下所述瞬铸,response 值由三步計(jì)算而成。當(dāng)多個(gè)數(shù)值合并的時(shí)候础锐,使用冒號(hào)作為分割符嗓节。

  1. 對(duì)用戶名認(rèn)證域(realm)以及密碼的合并值計(jì)算 MD5 哈希值皆警,結(jié)果稱為 HA1拦宣。
  2. 對(duì)HTTP方法以及URI的摘要的合并值計(jì)算 MD5 哈希值,例如信姓,GET/dir/index.html鸵隧,結(jié)果稱為 HA2
  3. 對(duì) HA1意推、服務(wù)器密碼隨機(jī)數(shù)(nonce)豆瘫、請(qǐng)求計(jì)數(shù)(nc)、客戶端密碼隨機(jī)數(shù)(cnonce)菊值、保護(hù)質(zhì)量(qop)以及 HA2 的合并值計(jì)算 MD5 哈希值外驱。結(jié)果即為客戶端提供的 response 值育灸。
    因?yàn)榉?wù)器擁有與客戶端同樣的信息,因此服務(wù)器可以進(jìn)行同樣的計(jì)算昵宇,以驗(yàn)證客戶端提交的 response 值的正確性磅崭。在上面給出的例子中,結(jié)果是如下計(jì)算的瓦哎。 (MD5()表示用于計(jì)算 MD5 哈希值的函數(shù)砸喻;“\”表示接下一行;引號(hào)并不參與計(jì)算)
    完成 RFC 2617 中所給出的示例蒋譬,將在每步得出如下結(jié)果割岛。
   HA1 = MD5( "Mufasa:testrealm@host.com:Circle Of Life" )
       = 939e7578ed9e3c518a452acee763bce9

   HA2 = MD5( "GET:/dir/index.html" )
       = 39aff3a2bab6126f332b942af96d3366

   Response = MD5( "939e7578ed9e3c518a452acee763bce9:\
                    dcd98b7102dd2f0e8b11d0f600bfb0c093:\
                    00000001:0a4f113b:auth:\
                    39aff3a2bab6126f332b942af96d3366" )
            = 6629fae49393a05397450978507c4ef1

此時(shí)客戶端可以提交一個(gè)新的請(qǐng)求,重復(fù)使用服務(wù)器密碼隨機(jī)數(shù)(nonce)(服務(wù)器僅在每次“401”響應(yīng)后發(fā)行新的nonce)犯助,但是提供新的客戶端密碼隨機(jī)數(shù)(cnonce)蜂桶。在后續(xù)的請(qǐng)求中,十六進(jìn)制請(qǐng)求計(jì)數(shù)器(nc)必須比前一次使用的時(shí)候要大也切,否則攻擊者可以簡(jiǎn)單的使用同樣的認(rèn)證信息重放老的請(qǐng)求。由服務(wù)器來(lái)確保在每個(gè)發(fā)出的密碼隨機(jī)數(shù)nonce時(shí)腰湾,計(jì)數(shù)器是在增加的雷恃,并拒絕掉任何錯(cuò)誤的請(qǐng)求。顯然费坊,改變HTTP方法和/或計(jì)數(shù)器數(shù)值都會(huì)導(dǎo)致不同的 response 值倒槐。
  服務(wù)器應(yīng)當(dāng)記住最近所生成的服務(wù)器密碼隨機(jī)數(shù)nonce的值。也可以在發(fā)行每一個(gè)密碼隨機(jī)數(shù)nonce后附井,記住過(guò)一段時(shí)間讓它們過(guò)期讨越。如果客戶端使用了一個(gè)過(guò)期的值,服務(wù)器應(yīng)該響應(yīng)“401”狀態(tài)號(hào)永毅,并且在認(rèn)證頭中添加stale=TRUE把跨,表明客戶端應(yīng)當(dāng)使用新提供的服務(wù)器密碼隨機(jī)數(shù)nonce重發(fā)請(qǐng)求,而不必提示用戶其它用戶名和口令沼死。
  服務(wù)器不需要保存任何過(guò)期的密碼隨機(jī)數(shù)着逐,它可以簡(jiǎn)單的認(rèn)為所有不認(rèn)識(shí)的數(shù)值都是過(guò)期的。服務(wù)器也可以只允許每一個(gè)服務(wù)器密碼隨機(jī)數(shù)nonce使用一次意蛀,當(dāng)然耸别,這樣就會(huì)迫使客戶端在發(fā)送每個(gè)請(qǐng)求的時(shí)候重復(fù)認(rèn)證過(guò)程。需要注意的是县钥,在生成后立刻過(guò)期服務(wù)器密碼隨機(jī)數(shù)nonce是不行的秀姐,因?yàn)榭蛻舳藢](méi)有任何機(jī)會(huì)來(lái)使用這個(gè)nonce。

四若贮、參考資料:

維基百科——HTTP摘要認(rèn)證

(完)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末省有,一起剝皮案震驚了整個(gè)濱河市痒留,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锥咸,老刑警劉巖狭瞎,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異搏予,居然都是意外死亡熊锭,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門雪侥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)碗殷,“玉大人,你說(shuō)我怎么就攤上這事速缨⌒科蓿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵旬牲,是天一觀的道長(zhǎng)仿粹。 經(jīng)常有香客問(wèn)我,道長(zhǎng)原茅,這世上最難降的妖魔是什么吭历? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮擂橘,結(jié)果婚禮上晌区,老公的妹妹穿的比我還像新娘。我一直安慰自己通贞,他們只是感情好朗若,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著昌罩,像睡著了一般哭懈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上茎用,一...
    開(kāi)封第一講書(shū)人閱讀 51,727評(píng)論 1 305
  • 那天银伟,我揣著相機(jī)與錄音,去河邊找鬼绘搞。 笑死彤避,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的夯辖。 我是一名探鬼主播琉预,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蒿褂!你這毒婦竟也來(lái)了圆米?” 一聲冷哼從身側(cè)響起卒暂,我...
    開(kāi)封第一講書(shū)人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎娄帖,沒(méi)想到半個(gè)月后也祠,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡近速,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年诈嘿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片削葱。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奖亚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出析砸,到底是詐尸還是另有隱情昔字,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布首繁,位于F島的核電站作郭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏弦疮。R本人自食惡果不足惜夹攒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挂捅。 院中可真熱鬧,春花似錦堂湖、人聲如沸闲先。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伺糠。三九已至,卻和暖如春斥季,著一層夾襖步出監(jiān)牢的瞬間训桶,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工酣倾, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舵揭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓躁锡,卻偏偏與公主長(zhǎng)得像午绳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子映之,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一拦焚、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,359評(píng)論 6 152
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng)蜡坊,內(nèi)容來(lái)源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,224評(píng)論 3 82
  • 工作流程 一次HTTP操作稱為一個(gè)事務(wù),其工作過(guò)程可分為四步: 1)首先客戶機(jī)與服務(wù)器需要建立連接赎败。只要單擊某個(gè)超...
    保川閱讀 4,608評(píng)論 2 14
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理秕衙,服務(wù)發(fā)現(xiàn),斷路器僵刮,智...
    卡卡羅2017閱讀 134,669評(píng)論 18 139
  • 混跡于各大理財(cái)論壇妓笙,我經(jīng)橙艉樱看到有關(guān)開(kāi)源的帖子。說(shuō)到開(kāi)源寞宫,離不開(kāi)兼職的話題萧福。有各行各業(yè)的人都在尋找兼職。那為什么越來(lái)...
    綠秋紫夏閱讀 1,716評(píng)論 0 3