标签:style blog http os io 使用 ar for 2014
众所周知,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();
}
}
}

标签:style blog http os io 使用 ar for 2014
原文地址:http://www.cnblogs.com/wufengtinghai/p/3948412.html