HTTP常用認(rèn)證方式

引言

經(jīng)常在工作中使用到了各種認(rèn)證方式,但從未考慮過這些認(rèn)證方式所屬的知識范疇,同時(shí)也解釋不清楚它們。

曾用到的認(rèn)證方式(看看是否您也用過,但很難解釋清楚他們):

  • Basic認(rèn)證(訪問API時(shí),瀏覽器會自動彈出一個(gè)對話框去輸入用戶名/密碼)
  • 用戶名密碼認(rèn)證(進(jìn)入站點(diǎn)主頁前,需要在登陸頁面輸入用戶名和密碼,這種更專業(yè)的叫法為表單認(rèn)證)
  • openID Connect認(rèn)證(用于第三方登陸認(rèn)證,比如微信提供給簡書的登錄認(rèn)證)
  • Kerberos認(rèn)證(一種用于Hadoop集群的客戶端認(rèn)證)

經(jīng)過閱讀《圖解HTTP協(xié)議》這一書后,對HTTP認(rèn)證方式有了進(jìn)一步的了解。本文旨在簡單總結(jié)HTTP認(rèn)證方式。

HTTP中有如下常用認(rèn)證:
1、Basic認(rèn)證
2、Digest認(rèn)證
3、SSL Client認(rèn)證
4、表單認(rèn)證

HTTP Basic認(rèn)證

每次客戶端請求都需帶上Authorization請求頭, 值為"Basic xxx"。xxx為對用戶名和密碼進(jìn)行Base64編碼后的值。 若客戶端是瀏覽器,則瀏覽器會提供一個(gè)輸入用戶名和密碼的對話框,用戶輸入用戶名和密碼后,瀏覽器會保存用戶名和密碼,用于構(gòu)造Authorization值。當(dāng)關(guān)閉瀏覽器后,用戶名和密碼將不再保存。

用戶名/密碼經(jīng)過Base64加碼后,這個(gè)Base64碼值可以輕易被解碼并獲得用戶名/密碼,所以此認(rèn)證方式并不安全。為了傳輸安全,需要配合SSL使用。

HTTP另外 Digest認(rèn)證

Digest認(rèn)證步驟如下:
第一步:客戶端訪問Http資源服務(wù)器。由于需要Digest認(rèn)證,服務(wù)器返回了兩個(gè)重要字段nonce(隨機(jī)數(shù))和realm。

第二步: 客戶端構(gòu)造Authorization請求頭,值包含username、realm、nouce、uri和response的字段信息。其中,realm和nouce就是第一步返回的值。nouce只能被服務(wù)端使用一次。uri(digest-uri)即Request-URI的值,但考慮到經(jīng)代理轉(zhuǎn)發(fā)后Request-URI的值可能被修改、因此實(shí)現(xiàn)會復(fù)制一份副本保存在uri內(nèi)。response也可叫做Request-digest,存放經(jīng)過MD5運(yùn)算后的密碼字符串,形成響應(yīng)碼。

第三步:服務(wù)器驗(yàn)證包含Authorization值的請求,若驗(yàn)證通過則可訪問資源。

Digest認(rèn)證可以防止密碼泄露和請求重放,但沒辦法防假冒。所以安全級別較低。

Digest和Basic認(rèn)證一樣,每次都會發(fā)送Authorization請求頭,也就相當(dāng)于重新構(gòu)造此值。所以兩者易用性都較差。

HTTP SSL Client認(rèn)證

SSL認(rèn)證安全級別較高,但需要承擔(dān)證書費(fèi)用。SSL認(rèn)證過程中涉及到一些重要的概念,數(shù)字證書機(jī)構(gòu)的公鑰、證書的私鑰和公鑰、非對稱算法(配合證書的私鑰和公鑰使用)、對稱密鑰、對稱算法(配合對稱密鑰使用)。

大致的認(rèn)證步驟如下:
第一步:客戶端請求服務(wù)資源,服務(wù)器要求客戶端出示數(shù)字證書。
第二步:客戶端發(fā)送數(shù)字證書
第三步:服務(wù)器通過數(shù)字證書機(jī)構(gòu)的公鑰驗(yàn)證數(shù)字證書的合法性,驗(yàn)證通過后取出證書的公鑰。
第四步:服務(wù)端隨機(jī)生成一個(gè)隨機(jī)數(shù)即為對稱密鑰,并使用非對稱算法和證書公鑰加密。這個(gè)加密后的字符串,只有發(fā)送的客戶端能解。
第五步:客服端使用非對稱解密算法和證書私鑰獲取服務(wù)端發(fā)送的對稱密鑰。后續(xù)客戶端和服務(wù)端的請求直接基于對稱算法和對稱密鑰。由于只有客戶端和服務(wù)端有對稱密鑰,所以后續(xù)發(fā)送的請求較安全。

SSL可以防泄漏、假冒、重放,所以在Web系統(tǒng)中得到了廣泛的應(yīng)用。

SSL客戶端認(rèn)證在實(shí)際中用得不多,因?yàn)橐粊硇枰诳蛻舳酥邪惭b證書(升級麻煩)、二來需要承擔(dān)證書費(fèi)用。

HTTP 表單認(rèn)證

基于表單的認(rèn)證方式并不存在于HTTP規(guī)范。所以實(shí)現(xiàn)方式也呈現(xiàn)多樣化。表單認(rèn)證一般都會配合cookie+sessiond的使用,現(xiàn)在絕大多數(shù)的Web站點(diǎn)都是使用此認(rèn)證方式。用戶在登錄頁中填寫用戶名和密碼,服務(wù)端認(rèn)證通過后會將sessionId返回給瀏覽器端,瀏覽器會保存sessionId到瀏覽器的Cookie中。因?yàn)镠ttp是無狀態(tài)的,所以瀏覽器使用Cookie來保存sessionId。下次客戶端發(fā)送的請求中會包含sessionId值,服務(wù)端發(fā)現(xiàn)sessionId存在并認(rèn)證過則會提供資源訪問。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,742評論 6 152
  • 工作流程 一次HTTP操作稱為一個(gè)事務(wù),其工作過程可分為四步: 1)首先客戶機(jī)與服務(wù)器需要建立連接。只要單擊某個(gè)超...
    保川閱讀 4,725評論 2 14
  • 前面兩篇文章中關(guān)于 HTTP 相關(guān)知識基本上介紹的差不多了,這篇文章是對 HTTP 協(xié)議的補(bǔ)充,主要介紹以下三點(diǎn)內(nèi)...
    lijiankun24閱讀 1,397評論 2 3
  • 一、作用 不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文傳播,帶來了三大風(fēng)險(xiǎn)。 (1)竊聽風(fēng)險(xiǎn)...
    XLsn0w閱讀 11,057評論 2 44
  • “我感覺我的頭要爆炸了, 那種痛苦如同空間的擠壓, 使我無法思考, 無法聽到他人的言語, 我要成為一個(gè)徹頭徹尾的瘋...
    釋迦干屎橛閱讀 1,801評論 0 1

友情鏈接更多精彩內(nèi)容