国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 編程應(yīng)用 > 正文

HTTPBasicAuthorization

2019-11-14 17:31:14
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

 在HTTP中,Basic Authorization基本認(rèn)證是一種用來(lái)允許Web瀏覽器或其他客戶端程序在請(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é)議兼容的字符集。

                                                                                                                                                                                                      ------維基百科

一個(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)答碼,客戶端可以再次提示用戶輸入口令.

一個(gè)包含基本認(rèn)證的HTTP請(qǐng)求:

GET /PRivate/index.html HTTP/1.0Host: localhostAuthorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

base64

Python中的base64模塊可以通過(guò)base64、base32或base 16編碼將二進(jìn)制數(shù)據(jù)編碼/解碼為文本。

上面例子中的用戶名為"Aladdin", password為 "open sesame":

>>> import base64>>> print base64.b64encode('Aladdin:open sesame')QWxhZGRpbjpvcGVuIHNlc2FtZQ==>>> print base64.b64decode('QWxhZGRpbjpvcGVuIHNlc2FtZQ==')Aladdin:open sesame

urllib2

python標(biāo)準(zhǔn)庫(kù)中使用urllib2來(lái)處理基本認(rèn)證。urllib2.HTTPBasicAuthHandler()處理程序可用add_password()來(lái)設(shè)置認(rèn)證。

h.add_password(realm,uri,user,passwd)

realm是與驗(yàn)證相關(guān)聯(lián)的名稱(chēng)或描述信息,取決于遠(yuǎn)程服務(wù)器。uri是基URL。user和passwd分別指定用戶名和密碼。

import urllib2auth=urllib2.HTTPBasicAuthHandler()auth.add_password('Administrator','http://www.example.com','Dave','123456')opener=urllib2.build_opener(auth)u=opener.open('http://www.example.com/evilplan.html')

源碼中的base64編碼方式:

raw = "%s:%s" % (user, pw)auth = 'Basic %s' % base64.b64encode(raw).strip()

requests

還有一個(gè)很常用的requests庫(kù),其中處理基本認(rèn)證:

import requestsrequests.get('https://api.github.com/user', auth=requests.auth.HTTPBasicAuth('user', 'pass'))

因?yàn)镠TTP Basic Auth很常用,所以也可以直接驗(yàn)證:

>>> requests.get('https://api.github.com/user', auth=('user', 'pass'))<Response [200]>

或者用request.session()保持認(rèn)證狀態(tài):

s = requests.Session()s.auth = ('user', 'pass')s.get('http://httpbin.org/')   

源碼中的base64編碼方式:

def _basic_auth_str(username, password):    """Returns a Basic Auth string."""    return 'Basic ' + base64.b64encode(('%s:%s' % (username, password)).encode('latin1')).strip().decode('latin1')

  


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 日照市| 鞍山市| 庆安县| 瓮安县| 枣强县| 百色市| 民权县| 油尖旺区| 南康市| 深州市| 湖口县| 利川市| 盐池县| 馆陶县| 河间市| 大田县| 绥棱县| 高台县| 南充市| 汪清县| 广南县| 鞍山市| 孟州市| 昌黎县| 水富县| 汾西县| 平潭县| 宁都县| 姜堰市| 南阳市| 广德县| 西乌珠穆沁旗| 郑州市| 仙桃市| 兴国县| 无极县| 佛山市| 苗栗市| 五寨县| 大安市| 平邑县|