HTTP basic auth
在HTTP中,基本認證(Basic access authentication)是一種用來允許網頁瀏覽器或其他客戶端程序在請求時提供用戶名和口令形式的身份憑證的一種登錄驗證方式。
在發送之前是以用戶名追加一個冒號然后串接上口令,并將得出的結果字符串再用Base64算法編碼。例如,提供的用戶名是Aladdin、口令是open sesame,則拼接后的結果就是Aladdin:open sesame,然后再將其用Base64編碼,得到QWxhZGRpbjpvcGVuIHNlc2FtZQ==。最終將Base64編碼的字符串發送出去,由接收者解碼得到一個由冒號分隔的用戶名和口令的字符串。
雖然對用戶名和口令的Base64算法編碼結果很難用肉眼識別解碼,但它仍可以極為輕松地被計算機所解碼,就像其容易編碼一樣。編碼這一步驟的目的并不是安全與隱私,而是為將用戶名和口令中的不兼容的字符轉換為均與HTTP協議兼容的字符集。
最初,基本認證是定義在HTTP 1.0規范(RFC 1945)中,后續的有關安全的信息可以在HTTP 1.1規范(RFC 2616)和HTTP認證規范(RFC 2617)中找到。
?
目錄
- 1優點
- 2缺點
- 3例子
- 4參考文獻和注釋
- 5參見
- 6外部鏈接
優點[編輯]
基本認證的一個優點是基本上所有流行的網頁瀏覽器都支持基本認證[1]。基本認證很少在可公開訪問的互聯網網站上使用,有時候會在小的私有系統中使用(如路由器網頁管理接口)。后來的機制HTTP摘要認證是為替代基本認證而開發的,允許密鑰以相對安全的方式在不安全的通道上傳輸。
程序員和系統管理員有時會在可信網絡環境中使用基本認證,使用Telnet或其他明文網絡協議工具手動地測試Web服務器。這是一個麻煩的過程,但是網絡上傳輸的內容是人可讀的,以便進行診斷。
缺點[編輯]
雖然基本認證非常容易實現,但該方案創建在以下的假設的基礎上,即:客戶端和服務器主機之間的連接是安全可信的。特別是,如果沒有使用SSL/TLS這樣的傳輸層安全的協議,那么以明文傳輸的密鑰和口令很容易被攔截。該方案也同樣沒有對服務器返回的信息提供保護。
現存的瀏覽器保存認證信息直到標簽頁或瀏覽器被關閉,或者用戶清除歷史記錄。[2]HTTP沒有為服務器提供一種方法指示客戶端丟棄這些被緩存的密鑰。這意味著服務器端在用戶不關閉瀏覽器的情況下,并沒有一種有效的方法來讓用戶退出。
例子[編輯]
這一個典型的HTTP客戶端和HTTP服務器的對話,服務器安裝在同一臺計算機上(localhost),包含以下步驟:
- 客戶端請求一個需要身份認證的頁面,但是沒有提供用戶名和口令。這通常是用戶在地址欄輸入一個URL,或是打開了一個指向該頁面的鏈接。
- 服務端響應一個401應答碼,并提供一個認證域。
- 接到應答后,客戶端顯示該認證域(通常是所訪問的計算機或系統的描述)給用戶并提示輸入用戶名和口令。此時用戶可以選擇確定或取消。
- 用戶輸入了用戶名和口令后,客戶端軟件會在原先的請求上增加認證消息頭(值是base64encode(username+":"+password)),然后重新發送再次嘗試。
- 在本例中,服務器接受了該認證屏幕并返回了頁面。如果用戶憑據非法或無效,服務器可能再次返回401應答碼,客戶端可以再次提示用戶輸入口令。
注意:客戶端有可能不需要用戶交互,在第一次請求中就發送認證消息頭。
客戶端請求(沒有認證信息):
GET /private/index.html HTTP/1.0 Host: localhost(跟隨一個換行,以回車(CR)加換行(LF)的形式)
服務端應答:
HTTP/1.0 401 Authorization Required Server: HTTPd/1.0 Date: Sat, 27 Nov 2004 10:18:15 GMT WWW-Authenticate: Basic realm="Secure Area" 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>客戶端的請求(用戶名“"Aladdin”,口令, password “open sesame”):
GET /private/index.html HTTP/1.0 Host: localhost Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==(跟隨一個空行,如上所述)
Authorization消息頭的用戶名和口令的值可以容易地編碼和解碼:
- 用Perl:
- 用PHP:
- 用Python:
- 用Ruby:
- 用Bash:
- 用XQuery(eXist-db):
- 用OpenSSL:
- 服務端的應答:
(跟隨一個空行,隨后是需憑據頁的HTML文本)。
參考文獻和注釋[編輯]
參見[編輯]
- HTTP摘要認證
外部鏈接[編輯]
- RFC2617: HTTP Authentication: Basic and Digest Access Authentication
總結
以上是生活随笔為你收集整理的HTTP basic auth的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 技术分享:什么是CDN鉴权(by光网烈火
- 下一篇: 深入了解Token认证的来龙去脉