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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

HTTP basic auth

發(fā)布時(shí)間:2024/2/28 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTTP basic auth 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在HTTP中,基本認(rèn)證(Basic access authentication)是一種用來(lái)允許網(wǎng)頁(yè)瀏覽器或其他客戶端程序在請(qǐng)求時(shí)提供用戶名和口令形式的身份憑證的一種登錄驗(yàn)證方式。

在發(fā)送之前是以用戶名追加一個(gè)冒號(hào)然后串接上口令,并將得出的結(jié)果字符串再用Base64算法編碼。例如,提供的用戶名是Aladdin、口令是open sesame,則拼接后的結(jié)果就是Aladdin:open sesame,然后再將其用Base64編碼,得到QWxhZGRpbjpvcGVuIHNlc2FtZQ==。最終將Base64編碼的字符串發(fā)送出去,由接收者解碼得到一個(gè)由冒號(hào)分隔的用戶名和口令的字符串。

雖然對(duì)用戶名和口令的Base64算法編碼結(jié)果很難用肉眼識(shí)別解碼,但它仍可以極為輕松地被計(jì)算機(jī)所解碼,就像其容易編碼一樣。編碼這一步驟的目的并不是安全與隱私,而是為將用戶名和口令中的不兼容的字符轉(zhuǎn)換為均與HTTP協(xié)議兼容的字符集。

最初,基本認(rèn)證是定義在HTTP 1.0規(guī)范(RFC 1945)中,后續(xù)的有關(guān)安全的信息可以在HTTP 1.1規(guī)范(RFC 2616)和HTTP認(rèn)證規(guī)范(RFC 2617)中找到。

?

目錄

  • 1優(yōu)點(diǎn)
  • 2缺點(diǎn)
  • 3例子
  • 4參考文獻(xiàn)和注釋
  • 5參見(jiàn)
  • 6外部鏈接

優(yōu)點(diǎn)[編輯]

基本認(rèn)證的一個(gè)優(yōu)點(diǎn)是基本上所有流行的網(wǎng)頁(yè)瀏覽器都支持基本認(rèn)證[1]。基本認(rèn)證很少在可公開(kāi)訪問(wèn)的互聯(lián)網(wǎng)網(wǎng)站上使用,有時(shí)候會(huì)在小的私有系統(tǒng)中使用(如路由器網(wǎng)頁(yè)管理接口)。后來(lái)的機(jī)制HTTP摘要認(rèn)證是為替代基本認(rèn)證而開(kāi)發(fā)的,允許密鑰以相對(duì)安全的方式在不安全的通道上傳輸。

程序員和系統(tǒng)管理員有時(shí)會(huì)在可信網(wǎng)絡(luò)環(huán)境中使用基本認(rèn)證,使用Telnet或其他明文網(wǎng)絡(luò)協(xié)議工具手動(dòng)地測(cè)試Web服務(wù)器。這是一個(gè)麻煩的過(guò)程,但是網(wǎng)絡(luò)上傳輸?shù)膬?nèi)容是人可讀的,以便進(jìn)行診斷。

缺點(diǎn)[編輯]

雖然基本認(rèn)證非常容易實(shí)現(xiàn),但該方案創(chuàng)建在以下的假設(shè)的基礎(chǔ)上,即:客戶端和服務(wù)器主機(jī)之間的連接是安全可信的。特別是,如果沒(méi)有使用SSL/TLS這樣的傳輸層安全的協(xié)議,那么以明文傳輸?shù)拿荑€和口令很容易被攔截。該方案也同樣沒(méi)有對(duì)服務(wù)器返回的信息提供保護(hù)。

現(xiàn)存的瀏覽器保存認(rèn)證信息直到標(biāo)簽頁(yè)或?yàn)g覽器被關(guān)閉,或者用戶清除歷史記錄。[2]HTTP沒(méi)有為服務(wù)器提供一種方法指示客戶端丟棄這些被緩存的密鑰。這意味著服務(wù)器端在用戶不關(guān)閉瀏覽器的情況下,并沒(méi)有一種有效的方法來(lái)讓用戶退出。

例子[編輯]

這一個(gè)典型的HTTP客戶端和HTTP服務(wù)器的對(duì)話,服務(wù)器安裝在同一臺(tái)計(jì)算機(jī)上(localhost),包含以下步驟:

  • 客戶端請(qǐng)求一個(gè)需要身份認(rèn)證的頁(yè)面,但是沒(méi)有提供用戶名和口令。這通常是用戶在地址欄輸入一個(gè)URL,或是打開(kāi)了一個(gè)指向該頁(yè)面的鏈接。
  • 服務(wù)端響應(yīng)一個(gè)401應(yīng)答碼,并提供一個(gè)認(rèn)證域。
  • 接到應(yīng)答后,客戶端顯示該認(rèn)證域(通常是所訪問(wèn)的計(jì)算機(jī)或系統(tǒng)的描述)給用戶并提示輸入用戶名和口令。此時(shí)用戶可以選擇確定或取消。
  • 用戶輸入了用戶名和口令后,客戶端軟件會(huì)在原先的請(qǐng)求上增加認(rèn)證消息頭(值是base64encode(username+":"+password)),然后重新發(fā)送再次嘗試。
  • 在本例中,服務(wù)器接受了該認(rèn)證屏幕并返回了頁(yè)面。如果用戶憑據(jù)非法或無(wú)效,服務(wù)器可能再次返回401應(yīng)答碼,客戶端可以再次提示用戶輸入口令。

注意:客戶端有可能不需要用戶交互,在第一次請(qǐng)求中就發(fā)送認(rèn)證消息頭。


客戶端請(qǐng)求(沒(méi)有認(rèn)證信息)

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

(跟隨一個(gè)換行,以回車(CR)加換行(LF)的形式)

服務(wù)端應(yīng)答

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>

客戶端的請(qǐng)求(用戶名“"Aladdin”,口令, password “open sesame”)

GET /private/index.html HTTP/1.0 Host: localhost Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

(跟隨一個(gè)空行,如上所述)

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以上版本,請(qǐng)改用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 $
  • 服務(wù)端的應(yīng)答
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

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

參考文獻(xiàn)和注釋[編輯]

  • ^?這里的“所有的流行網(wǎng)頁(yè)瀏覽器”包括任何當(dāng)前市場(chǎng)份額超過(guò)0.2%的網(wǎng)頁(yè)瀏覽器,參見(jiàn)網(wǎng)頁(yè)瀏覽器比較了解網(wǎng)頁(yè)瀏覽器對(duì)HTTP的支持
  • ^?[1]
  • 參見(jiàn)[編輯]

    • HTTP摘要認(rèn)證

    外部鏈接[編輯]

    • RFC2617: HTTP Authentication: Basic and Digest Access Authentication

    總結(jié)

    以上是生活随笔為你收集整理的HTTP basic auth的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。