HTTP Basic Authentication验证WCF Data Service

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连接的时候,处理服务器证书不安全的方法

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能LeadAI

通过UDP广播实现Android局域网Peer Discovering

本文将介绍以下知识点: 1、TCP与UDP的区别; 2、单播、多播、广播; 3、Java中实现UDP的重要的类; 4、Peer Discovering方案 01...

5684
来自专栏恰童鞋骚年

.NET Core微服务之基于IdentityServer建立授权与验证服务(续)

上一篇我们基于IdentityServer4建立了一个AuthorizationServer,并且继承了QuickStartUI,能够成功获取Token了。这一...

2955
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第二十一天 Web商城实战一【悟空教程】

public class BaseServlet extends HttpServlet {

2054
来自专栏比原链

Derek解读Bytom源码-P2P网络 地址簿

Gitee地址:https://gitee.com/BytomBlockchain/bytom

891
来自专栏FreeBuf

Windows DNS API RCE漏洞分析及PoC构造

根据 Microsoft 2017 年 10 月安全通告,多个版本 Windows 中的 dnsapi.dll 在处理 DNS response 时可导致 SY...

36910
来自专栏Google Dart

Flutter 构建完整应用手册-联网 顶

从大多数应用程序获取互联网上的数据是必要的。 幸运的是,Dart和Flutter为这类工作提供了工具!

1342
来自专栏FreeBuf

远程RPC溢出EXP编写实战之MS06-040

0x01 前言 MS06-040算是个比较老的洞了,在当年影响十分之广,基本上Microsoft大部分操作系统都受到了影响,威力不亚于17年爆出的”永恒之蓝”漏...

30810
来自专栏挖坑填坑

使用.net core ABP和Angular模板构建博客管理系统(实现博客列表页面)

1991
来自专栏Kubernetes

原 荐 Kubernetes Resourc

更多关于kubernetes的深入文章,请看我csdn或者oschina的博客主页。 ResoureQuota介绍 关于ResoureQuota和Resourc...

5309
来自专栏Jerry的SAP技术分享

Opportunity的chance of success的赋值逻辑

该字段的值和另外两个字段Sales Stage和Status都相关。

2528

扫码关注云+社区

领取腾讯云代金券