国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 德昌县| 改则县| 湖口县| 紫阳县| 无为县| 中阳县| 永清县| 民和| 白朗县| 唐山市| 大荔县| 太湖县| 大方县| 瓮安县| 安乡县| 大理市| 东源县| 永胜县| 衡阳市| 连南| 阿拉尔市| 临沧市| 清河县| 深水埗区| 石泉县| 南宫市| 溧阳市| 古蔺县| 环江| 庆城县| 吕梁市| 阜新| 泰兴市| 沧源| 北辰区| 通渭县| 昭苏县| 扶绥县| 大庆市| 萨迦县| 晋州市|