一、 匿名访问........................................................................................................................ 1
1、 客户端发送一个匿名的http请求............................................................................ 2
2、 IIS直接返回请求的页面内容................................................................................... 2
二、 Windows集成验证........................................................................................................ 2
1、 客户端和服务端机器都在域,客户端以域帐户登录,以服务器名访问...................... 3
1.1. 第一次HttpWebRequest先以匿名发送http请求......................................... 3
1.2. 服务端返回无授权回应..................................................................................... 3
1.3. 再次请求,选择Kerberos验证,附带上此用户的验证票................................. 3
1.4. 服务端验证通过,返回页面.............................................................................. 4
2、 客户端和服务端机器都在域,客户端以域帐户登录,以服务器名访问以外的所有情况 5
2.1. 第一次HttpWebRequest先以匿名发送http请求......................................... 5
2.2. 服务端返回无授权回应..................................................................................... 5
2.3. HttpWebRequest选择NTLM验证,请求质询码............................................ 5
2.4. 服务器返回质询码............................................................................................ 5
2.5. HttpWebRequest发送登录本机的账户加密后的质询码.................................. 5
2.6. 服务器通过验证,返回页面.............................................................................. 6
3、 客户端传送定制用户凭据到服务端........................................................................... 6
三、 基本身份验证................................................................................................................. 6
1.1. 第一次HttpWebRequest先以匿名发送http请求......................................... 7
1.2. 服务端返回无授权回应..................................................................................... 7
1.3. HttpWebRequest发送base64格式的用户名和密码..................................... 7
1.4. 服务器通过验证,返回页面.............................................................................. 7
四、 一个应用程序访问web services的例子........................................................................ 8
1.1. Web services端代码...................................................................................... 8
1.2. Soap调用web services的格式..................................................................... 8
1.3. 客户端应用调用web services代码................................................................. 9
前面那篇文章《IIS的各种身份验证详细测试》讨论的是客户端为IE访问IIS的各种身份验证的情况,这篇文章讨论一般应用程序如何应对IIS的各种身份验证,把身份凭据传送到IIS服务端。
无论是访问一般的网页,还是访问web services,都是通过http协议来完成的,相应的dotnet类库中提供了HttpWebRequest类来实现http的各种访问控制。
一、 匿名访问
服务端IIS设置为允许匿名访问,客户端使用HttpWebRequest发送一个get请求,请求一个页面。
//根据需要访问的URL新建HttpWebRequest对象
HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create("http://192.168.100.82/iisstart.htm");
myHttpWebRequest.Method = "GET";
//发送http请求,接收回应到HttpWebResponse对象
HttpWebResponse myWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
//获得http回应的内容部分,是个Stream类型的对象
Stream newStream = myWebResponse.GetResponseStream();
byte[] byteResponse = new byte[myWebResponse.ContentLength];
newStream.Read(byteResponse, 0, (int)myWebResponse.ContentLength);
//最后把http回应部分内容转成string
string strContent = Encoding.UTF8.GetString(byteResponse);
myWebResponse.Close();
抓数据包看这个http的请求和回应过程就是这样的:
1、 客户端发送一个匿名的http请求
GET /iisstart.htm HTTP/1.1
Host: 192.168.100.82
Connection: Keep-Alive