技术开发 频道

应用程序向IIS传送身份验证



三、  基本身份验证

 

服务端IIS设置为不允许匿名访问,只选择了基本身份验证,客户端使用HttpWebRequest发送一个get请求,请求一个页面。

 

基本身份验证,客户端直接把用户的用户名和密码简单的转换为base64编码后发送到服务端,属于明码传送,不具安全性。

 

基本身份验证,HttpWebRequest.Credentials属性只能使用NetworkCredential来传送用户名也密码,CredentialCache.DefaultCredentials不支持基本身份验证。

 

在服务端只要求基本身份验证的情况下,如果HttpWebRequest.Credentials属性使用的是CredentialCache.DefaultCredentials,当收到服务端返回无授权(要求基本身份验证)回应后,HttpWebRequest直接跑出无授权异常。

 

客户端用户凭据也是这样:

 

myHttpWebRequest.Credentials = new NetworkCredential("用户名", "口令");

 

但是,根据服务端不同的回应,HttpWebRequest会有不同的动作。

 

看一下整个请求响应过程:

 

1.1.    第一次HttpWebRequest先以匿名发送http请求

 

GET /iisstart.htm HTTP/1.1

 

Host: 2003base

 

Connection: Keep-Alive

 

1.2.    服务端返回无授权回应

 

服务端IIS设置为不允许匿名访问,要求基本身份验证,所以服务端返回无授权回应,同时在http头加了个WWW-Authenticate: Basic realm="2003base" 头,Basic表示要求基本身份验证。

 

HTTP/1.1 401 Unauthorized

 

Content-Length: 1327

 

Content-Type: text/html

 

Server: Microsoft-IIS/6.0

 

WWW-Authenticate: Basic realm="2003base"

 

MicrosoftOfficeWebServer: 5.0_Pub

 

X-Powered-By: ASP.NET

 

Date: Mon, 26 Nov 2007 08:52:42 GMT

 

1.3.    HttpWebRequest发送base64格式的用户名和密码

 

HttpWebRequest收到Basic的验证头后,就把NetworkCredential提供的用户名和口令链接起来,转换成base64编码,直接发送到服务端。

 

Base64编码用户名和密码看上去是这样的:Y2hua2luZzpwYXNzd29yZA==

 

经过转换后,可以看到用户名和密码是:chnking:password

 

GET /iisstart.htm HTTP/1.1

 

Authorization: Basic Y2hua2luZzpwYXNzd29yZA==

 

Host: 2003base

 

1.4.    服务器通过验证,返回页面

 

HTTP/1.1 200 OK

 

Content-Length: 200

 

Content-Type: text/html

 

Last-Modified: Fri, 23 Nov 2007 07:00:18 GMT

 

Accept-Ranges: bytes

 

ETag: "6084ba819e2dc81:356"

 

Server: Microsoft-IIS/6.0

 

MicrosoftOfficeWebServer: 5.0_Pub

 

X-Powered-By: ASP.NET

 

Date: Mon, 26 Nov 2007 08:52:42 GMT

 

 

<html>

 

 

<head>

 

<meta HTTP-EQUIV="Content-Type" Content="text/html; charset=gb2312">

 

<title ID=titletext>......</title>

 

</head>

 

 

<body bgcolor=white>

 

.This is a sample page!

 

</body>

 

</html>

 

0
相关文章