技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機(jī)純凈版,64位旗艦版,綠色軟件,免費(fèi)軟件下載基地!

當(dāng)前位置:主頁(yè) > 教程 > 硬件教程 >

HTTP協(xié)議是什么?HTTP協(xié)議認(rèn)證介紹

來(lái)源:技術(shù)員聯(lián)盟┆發(fā)布時(shí)間:2018-11-08 00:23┆點(diǎn)擊:

  什么是HTTP基本認(rèn)證

  桌面應(yīng)用程序也通過(guò)HTTP協(xié)議跟Web服務(wù)器交互, 桌面應(yīng)用程序一般不會(huì)使用cookie, 而是把 "用戶(hù)名+冒號(hào)+密碼"用BASE64算法加密后的字符串放在http request 中的header Authorization中發(fā)送給服務(wù)端, 這種方式叫HTTP基本認(rèn)證(Basic Authentication)

  當(dāng)瀏覽器訪(fǎng)問(wèn)使用基本認(rèn)證的網(wǎng)站的時(shí)候, 瀏覽器會(huì)提示你輸入用戶(hù)名和密碼,如下圖

HTTP協(xié)議是什么?HTTP協(xié)議認(rèn)證介紹 三聯(lián)

  假如用戶(hù)名密碼錯(cuò)誤的話(huà), 服務(wù)器會(huì)返回401 如下圖

HTTP協(xié)議是什么?HTTP協(xié)議認(rèn)證介紹

  HTTP基本認(rèn)證的過(guò)程

  第一步: 客戶(hù)端發(fā)送http request 給服務(wù)器,

  第二步: 因?yàn)閞equest中沒(méi)有包含Authorization header, 服務(wù)器會(huì)返回一個(gè)401 Unauthozied給客戶(hù)端,并且在Response的 header "WWW-Authenticate" 中添加信息。

HTTP協(xié)議是什么?HTTP協(xié)議認(rèn)證介紹

  第三步:客戶(hù)端把用戶(hù)名和密碼用BASE64加密后,放在A(yíng)uthorization header中發(fā)送給服務(wù)器, 認(rèn)證成功。

  第四步:服務(wù)器將Authorization header中的用戶(hù)名密碼取出,進(jìn)行驗(yàn)證, 如果驗(yàn)證通過(guò),將根據(jù)請(qǐng)求,發(fā)送資源給客戶(hù)端

HTTP協(xié)議是什么?HTTP協(xié)議認(rèn)證介紹

  使用Fiddler Inspectors 下的Auth 選項(xiàng)卡,可以很方便的看到用戶(hù)名和密碼:

HTTP協(xié)議是什么?HTTP協(xié)議認(rèn)證介紹

  HTTP基本認(rèn)證的優(yōu)點(diǎn)

  HTTP基本認(rèn)證,簡(jiǎn)單明了。Rest API 就是經(jīng)常使用基本認(rèn)證的。

  每次都要進(jìn)行認(rèn)證

  http協(xié)議是無(wú)狀態(tài)的, 同一個(gè)客戶(hù)端對(duì) 服務(wù)器的每個(gè)請(qǐng)求都要求認(rèn)證。

  HTTP基本認(rèn)證和HTTPS

  把 "用戶(hù)名+冒號(hào)+密碼" 用BASE64加密后的string雖然用肉眼看不出來(lái), 但用程序很容易解密,上圖可以看到Fiddler就直接給解密了。 所以這樣的http request在網(wǎng)絡(luò)上,如果用HTTP傳輸是很不安全的。 一般都是會(huì)用HTTPS傳輸,HTTPS是加密的,,所以比較安全。

  HTTP OAuth認(rèn)證

  OAuth對(duì)于Http來(lái)說(shuō),就是放在A(yíng)uthorization header中的不是用戶(hù)名密碼, 而是一個(gè)token。

  微軟的Skydrive 就是使用這樣的方式, 如下圖:

HTTP協(xié)議是什么?HTTP協(xié)議認(rèn)證介紹

  其他認(rèn)證

  除了基本認(rèn)證(Basic Authentication), 還有摘要認(rèn)證digest authentication, WSSE(WS-Security)認(rèn)證

  客戶(hù)端的使用

  客戶(hù)端如果要跟“使用基本認(rèn)證的網(wǎng)站”交互。 非常很簡(jiǎn)單,把用戶(hù)名密碼加在A(yíng)uthorization header中就可以了。

 

  C#

string url = "https://testsite"; HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); NetworkCredential nc = new NetworkCredential("username", "password"); req.Credentials = nc;

  Linux下的curl

curl -u username:password https://testsite/