日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HTTP basic auth

發布時間:2024/2/28 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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:
use MIME::Base64; print encode_base64('Aladdin:open sesame'), "\n"; print decode_base64('QWxhZGRpbjpvcGVuIHNlc2FtZQ=='), "\n";
  • 用PHP:
echo base64_encode("Aladdin:open sesame")."\n"; echo base64_decode("QWxhZGRpbjpvcGVuIHNlc2FtZQ==")."\n";
  • 用Python:
print "Aladdin:open sesame".encode("base64") print "QWxhZGRpbjpvcGVuIHNlc2FtZQ==".decode("base64")
  • 用Ruby:
require 'base64' puts Base64::encode64("Aladdin:open sesame") puts Base64::decode64("QWxhZGRpbjpvcGVuIHNlc2FtZQ==") 如果使用Ruby 2以上版本,請改用Base64.strict_encode64
  • 用Bash:
$ echo -n "Aladdin:open sesame" | base64 QWxhZGRpbjpvcGVuIHNlc2FtZQ== $ echo -n "QWxhZGRpbjpvcGVuIHNlc2FtZQ==" | base64 -d Aladdin:open sesame
  • 用XQuery(eXist-db):
let $encode := util:base64-encode('Aladdin:open sesame') let $decode := util:base64-decode('QWxhZGRpbjpvcGVuIHNlc2FtZQ==')
  • 用OpenSSL:
$ printf "Aladdin:open sesame" | openssl enc -base64 QWxhZGRpbjpvcGVuIHNlc2FtZQ== $ echo "QWxhZGRpbjpvcGVuIHNlc2FtZQ==" | openssl enc -base64 -d Aladdin:open sesame $
  • 服務端的應答
HTTP/1.0 200 OK Server: HTTPd/1.0 Date: Sat, 27 Nov 2004 10:19:07 GMT Content-Type: text/html Content-Length: 10476

(跟隨一個空行,隨后是需憑據頁的HTML文本)。

參考文獻和注釋[編輯]

  • ^?這里的“所有的流行網頁瀏覽器”包括任何當前市場份額超過0.2%的網頁瀏覽器,參見網頁瀏覽器比較了解網頁瀏覽器對HTTP的支持
  • ^?[1]
  • 參見[編輯]

    • HTTP摘要認證

    外部鏈接[編輯]

    • RFC2617: HTTP Authentication: Basic and Digest Access Authentication

    總結

    以上是生活随笔為你收集整理的HTTP basic auth的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。