衆所周知,Web令人們能夠很方便的訪問分佈在世界各個角落裏信息。可是僅僅是方便仍是不夠的,並非全部的信息都適合在互聯網上公開訪問,咱們須要保證只有特定的人才能看到咱們的敏感信息而且執行特定的操做。算法
服務器須要經過某種方式瞭解訪問用戶的身份。一旦服務器知道了用戶身份,就能夠判斷用戶能夠訪問的事務和資源了。認證意味着要證實客戶端訪問用戶是誰。一般狀況是經過提供用戶名和密碼來認證的。HTTP爲咱們提供了一些原生的工具。今天咱們來看下基本認證。安全
HTTP提供了一個原生的質詢/響應框架,簡化了對用戶的認證過程。HTTP的認證模型如圖所示。服務器
Web服務器接收到一條HTTP請求報文時,服務器沒有直接響應請求的資源,而是以一個「認證質詢」進行響應,要求用戶提供一些保密信息來講明其身份。用戶再次發起請求時,要附上保密證書(用戶名和密碼)。若是與要求的不匹配,服務器能夠再次質詢客戶端,或者產生一條錯誤信息。若是證書匹配則返回請求的資源。網絡
基本認證明例框架
HTTP基本認證將用戶名和密碼打包在一塊兒,並使用base-64編碼方式對其進行編碼。具體過程以下圖所示。工具
2. 關閉匿名認證,開啓基本認證方式,直接訪問須要輸入用戶名密碼網站
3.客戶端模擬基本認證過程編碼
控制檯模擬代碼以下加密
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication_HttpSec { class Program { static void Main(string[] args) { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri("HTTP://Localhost")); request.Method = "Get"; WebResponse response = null; try { response = request.GetResponse(); } catch (WebException ex) { Console.WriteLine("訪問發生異常,異常信息以下:"+ ex.Message); Console.WriteLine("異常信息返回的質詢響應頭爲:"); foreach (string key in ex.Response.Headers.Keys) { Console.WriteLine(" "+ key +":"+ex.Response.Headers[key]); } Console.WriteLine("添加Authorization認證頭部並從新發送請求"); HttpWebRequest request2 = (HttpWebRequest)HttpWebRequest.Create(new Uri("HTTP://Localhost")); request2.Method = "Get"; request2.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes("administrator:P@ssword"))); try { response = request2.GetResponse(); } catch (WebException ex2) { Console.WriteLine("添加Authorization認證頭部並從新發送請求發生異常:"+ex2.Message); Console.Read(); return; } Stream stream = response.GetResponseStream(); System.IO.StreamReader reader = new StreamReader(stream); string content = reader.ReadToEnd(); Console.WriteLine("請求響應的內容以下"); Console.WriteLine(content); } Console.Read(); } } }