HTTP協(xié)議授權(quán)認(rèn)證簡(jiǎn)介

我們平時(shí)在打開網(wǎng)頁時(shí)或者在用瀏覽器訪問你局域網(wǎng)的路由器時(shí),經(jīng)常會(huì)出現(xiàn)彈出登陸頁面框要進(jìn)行登陸授權(quán)后才能繼續(xù)訪問。比如如下提示:


HTTP授權(quán)驗(yàn)證

上面圖片展示的一個(gè)場(chǎng)景是客戶端在使用HTTP協(xié)議和服務(wù)端通信時(shí),服務(wù)器需要對(duì)客戶端進(jìn)行授權(quán)認(rèn)證,客戶端輸入正確的用戶密碼后才能繼續(xù)進(jìn)行訪問。那這個(gè)流程是如何實(shí)現(xiàn)的呢?

1.客戶端請(qǐng)求需要授權(quán)認(rèn)證的URL地址。

GET / HTTP/1.1
Accept: */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.2; .NET CLR 2.0.50727)
Host: 192.168.1.1

2.服務(wù)端返回401,告訴客戶端這個(gè)請(qǐng)求需要授權(quán)認(rèn)證,并且指定授權(quán)認(rèn)證的方式。(在IE中系統(tǒng)會(huì)彈出對(duì)話框讓輸入用戶和密碼)

HTTP/1.1 401 Unauthorized
Server: Router
Connection: close
WWW-Authenticate: Basic realm="TP-LINK Wireless N Router WR740N"
[response body]

3.客戶端按服務(wù)器要求的授權(quán)方式,拼裝用戶和密碼,放入到請(qǐng)求頭中,并再次發(fā)送。

GET / HTTP/1.1
Accept: */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.2; .NET CLR 2.0.50727)
Host: 192.168.1.1
Authorization: Basic YWRtaW46YWRtaW4=

4.服務(wù)端根據(jù)提供用戶的密碼,來決定返回成功還是失敗。

HTTP/1.1 200 OK
Server: Router
Connection: close
[successful response body]

我們稱上面這種授權(quán)認(rèn)證機(jī)制叫challange/response機(jī)制,客戶端發(fā)起請(qǐng)求,服務(wù)器發(fā)起挑戰(zhàn)(challange),客戶端接收挑戰(zhàn),服務(wù)器返回挑戰(zhàn)結(jié)果。

在HTTP協(xié)議1.0系統(tǒng)中只支持:基本認(rèn)證(Basic realm),而在1.1中支持摘要認(rèn)證:(Digest realm),和WSSE(WS-Security)認(rèn)證 至于使用什么認(rèn)證由服務(wù)端在返回的401響應(yīng)中的WWW-Authenticate中指定。

1.基本認(rèn)證(Basic realm)方式下,客戶端接受挑戰(zhàn)的方式是用: BASE64(用戶:密碼)的結(jié)果返回給服務(wù)端。這種方法比較簡(jiǎn)單,而且在網(wǎng)絡(luò)傳輸中很容易被破解。上面的例子用的就是基本認(rèn)證方式,這時(shí)候客戶端只需要在請(qǐng)求頭中帶上:
Authorization: [認(rèn)證的方式] [BASE64(用戶:密碼)]

2.摘要認(rèn)證(Digest realm)方式下,服務(wù)端在響應(yīng)401時(shí)會(huì)返回一個(gè)隨機(jī)數(shù)。 客戶端 把MD5(用戶,密碼,隨機(jī)數(shù))后的值,連同用戶一起通過Authorization: 請(qǐng)求頭發(fā)送給服務(wù)端。服務(wù)端則根據(jù)用戶取出對(duì)應(yīng)的密碼,隨機(jī)數(shù)同樣用MD5(用戶,密碼,隨機(jī)數(shù)), 如果兩者相等則認(rèn)為認(rèn)證通過,否則認(rèn)證失敗。查看具體交互過程

3.WSSE(WS-Security)認(rèn)證。主要用于webservice服務(wù)的授權(quán)認(rèn)證,具體請(qǐng)參考WSSE

4.對(duì)于我們有時(shí)候訪問第三方需要授權(quán)的資源時(shí),我們采用OAuth協(xié)議來讓第三方進(jìn)行授權(quán)認(rèn)證,因此在我們沒有登錄前,訪問這些資源時(shí)服務(wù)端也可以返回401。同時(shí)它還帶了如下的響應(yīng):
WWW-Authenticate: OAuth realm=<your_realm>
這樣客戶端就知道這種資源是需要OAuth認(rèn)證的,這時(shí)候客戶端應(yīng)該啟用Aauth認(rèn)證機(jī)制,也就是OAuth協(xié)議可以用http認(rèn)證的擴(kuò)展來傳輸各種數(shù)據(jù),也可以自己定義post方式來進(jìn)行傳輸,具體參考OAUTH協(xié)議。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,420評(píng)論 6 152
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng),內(nèi)容來源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,252評(píng)論 3 82
  • 工作流程 一次HTTP操作稱為一個(gè)事務(wù),其工作過程可分為四步: 1)首先客戶機(jī)與服務(wù)器需要建立連接。只要單擊某個(gè)超...
    保川閱讀 4,636評(píng)論 2 14
  • 本文整理自MIN飛翔博客 [1] 1. 概念 協(xié)議是指計(jì)算機(jī)通信網(wǎng)絡(luò)中兩臺(tái)計(jì)算機(jī)之間進(jìn)行通信所必須共同遵守的規(guī)定或...
    HoyaWhite閱讀 2,704評(píng)論 2 20
  • 留下美麗在心中 秦琦琦 歲月已經(jīng)輾過幾個(gè)輪回,可是你們的美麗留在了我們心中。 ——題記 自信執(zhí)著之美——李白 那年...
    荷塘戀雨閱讀 332評(píng)論 0 0