众所周知,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(); } } }