HTTP協議2之基本認證--轉

http協議是無狀態的, 瀏覽器和web服務器之間能夠經過cookie來身份識別html

桌面應用程序(好比新浪桌面客戶端)跟Web服務器之間是如何身份識別呢?web

什麼是HTTP基本認證

桌面應用程序也經過HTTP協議跟Web服務器交互瀏覽器

 桌面程序把 "用戶名+冒號+密碼"用BASE64編碼的字符串放在http 請求中的header Authorization中發送給服務端叫HTTP基本認證(Basic Authentication)安全

當瀏覽器訪問使用基本認證的網站的時候, 瀏覽器會提示你輸入用戶名和密碼,以下圖服務器

 

假如用戶名密碼錯誤的話, 服務器會返回401 以下圖cookie

 

HTTP基本認證的過程

第一步:  客戶端發送http request 給服務器, 網絡

第二步:  由於request中沒有包含Authorization header,  服務器會返回一個401 Unauthozied 給客戶端,而且在Response 的 header "WWW-Authenticate" 中添加信息。post

 

第三步:客戶端把用戶名和密碼用BASE64編碼後,放在Authorization header中發送給服務器, 認證成功。網站

第四步:服務器將Authorization header中的用戶名密碼取出,進行驗證, 若是驗證經過,將根據請求,發送資源給客戶端編碼

使用Fiddler Inspectors 下的Auth 選項卡,能夠很方便的看到用戶名和密碼:

 

HTTP基本認證,簡單明瞭。Rest API 就是常用基本認證的

 http協議是無狀態的, 同一個客戶端對 服務器的每一個請求都要求認證

 

HTTP基本認證和HTTPS

把 "用戶名+冒號+密碼" 用BASE64編碼後的string雖然用肉眼看不出來, 但用程序很容易解密,上圖能夠看到Fiddler就直接給解密了。 因此這樣的http request 在網絡上,若是用HTTP傳輸是很不安全的。 通常都是會用HTTPS傳輸, HTTPS是加密的, 因此比較安全.

HTTP OAuth認證

OAuth 對於Http來講,就是放在Authorization header中的不是用戶名密碼, 而是一個token.
微軟的Skydrive 就是使用這樣的方式, 以下圖

 

其餘認證

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

客戶端的使用

客戶端若是要跟「使用基本認證的網站」交互。 很是很簡單,把用戶名密碼 加在Authorization header中就能夠了。
 
C#
string url = "https://testsite";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
NetworkCredential nc = new NetworkCredential("username", "password");
req.Credentials = nc;

 

轉:http://www.cnblogs.com/TankXiao/archive/2012/09/26/2695955.html

相關文章
相關標籤/搜索