您的位置:首页 > 理论基础 > 计算机网络

HTTP Basic Authentication验证WCF Data Service

2010-08-15 21:15 344 查看
WCF Data Service是OData协议,也是RESTFul Service的一种,上篇文章已经介绍了HTTP Basic Authentication for RESTFul Service,也介绍了服务端如何设置。现在我们来一下客户端怎么样调用。
按照OData and Authentication – Part 6 – Custom Basic Authentication的介绍的方法调用:
1: Entities  ctx = new Entities(new Uri("http://localhost:8080/YupskyDataService.svc"));


2: var serviceCreds = new NetworkCredential("admin", "admin");


3: var cache = new CredentialCache();


4: var serviceUri = new Uri("http://localhost:8080/YupskyDataService.svc");


5: cache.Add(serviceUri, "Basic", serviceCreds);


6: ctx.Credentials = cache;


7: ctx.SendingRequest += new EventHandler<SendingRequestEventArgs>(OnSendingRequest);


8: 


9: static void OnSendingRequest(object sender, SendingRequestEventArgs e)


10: {


11:     var creds = "user" + ":" + "password";


12:     var bcreds = Encoding.ASCII.GetBytes(creds);


13:     var base64Creds = Convert.ToBase64String(bcreds);


14:     e.RequestHeaders.Add("Authorization", "Basic " + base64Creds);


15: }


上面的代码可以完成http方式的调用,如果是https方式调用就会出现错误:

“The remote certificate is invalid according to the validation procedure”

[WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.]

此时需要进行强制验证通过,解决方法是在执行你的代码之前先回调一个名为ServicePointManager的类,每当http客户端的堆栈进行证书验证时,都会检查是否可以回调,如果可以,则执行你你的代码。而要挂接该回调,则必须提供类型RemoteCertificateValidationCallback的一个委托,在调用之前加入如下代码:


1: ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(OnValidationCallback);


2: 


3: public bool OnValidationCallback(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors errors)


4: {


5:      //不管服务端证书怎么样,都通过校验,嘿嘿
           return true;


6: }


相关阅读

HttpWebRequest使用SSL连接的时候,处理服务器证书不安全的方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: