C# HTTP Basic 认证

HTTP RFC2617 里规定的两种标准的认证方式(Baisc,Digest)与常见的SESSION机制不同。HTTP认证是无状态的,在HTTP-HEADER里传输。而 SESSION则在服务端要维护,通过客户端发送SESSIONID来标识不同的用户。

 

如果是SOAP Web service需要HTTP的基本认证:

 

用Visual Studio或者SDK生成一个Web Service的调用类,假设该类是HelloWorldService 。然后写一新类NewHelloWorldService 继承自工具生成的类HelloWorldService:

 

public class NewHelloWorldService : HelloWorldService {

          protected override WebRequest GetWebRequest(Uri uri) {
                        WebRequest r = base.GetWebRequest(uri);
                        // http basic authentication
                        r.Credentials = new NetworkCredential("%UserName%", "%UserPassword%");
                        // if you want to get latest data without cache
                        // r.Headers["Cache-Control"] = "no-cache";

                        // Set 180 seconds timeout

                        // r.Timeout = 180 * 1000;
                        return r;
        }

}

 

其中最重要的一行就是加粗的部分,将用户名和密码分别替换%UserName%和%UserPassword%,即可实现HTTP基本认证。

 

如果服务器端的WEB服务又使用了Cookie验证,则在调用该服务的方法前,应该设置一个的CookieContainer:

 

CookieContainer theCookies = new CookieContainer();

HelloWorldService ws = new NewHelloWorldService();

ws.CookieContainer = theCookies;

 

如果要查看Response的一些HTTP头的信息,应该在NewHelloWorldService 类里重载GetWebResponse:

 

protected override WebResponse GetWebResponse(WebRequest request) {

       WebResponse r = base.GetWebResponse(request);
       foreach (string name in r.Headers.AllKeys) {

              // if (name == aHEADER) {}

       }

       return r;

}

 

C#的NetworkCredential 将自动封装一个HTTP的HEADER:

Authorization: Basic aGVsbG86d29ybGQ=

 

上面的Authorization: Basic 后面的字符是Base64编码的用户名加上“:”再加上密码,即base64(UserName + ":" + UserPassword)。不同的用户有不同的值。

 

如果是Restful的Web服务:

      HttpWebRequest和WebRequest则直接给Credentials 赋值一个NetworkCredential 即可。

 

如果用基于TCP的Socket:

      则需要手工附加该HTTP的HEADER。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值