HTTP Basic Authentication验证WCF Data Service
时间:2022-04-23
本文章向大家介绍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连接的时候,处理服务器证书不安全的方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用现代化的脚本进行 ArcGIS JS API 开发
- TextField suffixIcon点击时TextField 选中弹出键盘<Flutter Bug篇>
- seata redis模式重构之全局事务更新
- 【STM32F407】第7章 RL-TCPnet V7.X网络协议栈移植(RTX5)
- 【STM32F429】第7章 RL-TCPnet V7.X网络协议栈移植(RTX5)
- [白话解析] 深入浅出 极大似然估计 & 极大后验概率估计
- 【STM32H7】第7章 RL-TCPnet V7.X网络协议栈移植(RTX5)
- TinyMCE 富文本编辑器的使用实例指导
- dotnet 在国产 UOS 系统利用 dotnet tool 工具做文件传输
- [白话解析] 深入浅出支持向量机(SVM)之核函数
- C# 线程同步之事件信号阻塞 AutoResetEvent
- [白话解析] 深入浅出最大熵模型
- [白话解析] 带你一起梳理Word2vec相关概念
- 利用SSE服务器主动向浏览器端发送消息
- [白话解析] Flink的Watermark机制