WCF HttpBinding 安全解析 (5)Basic验证(IIS宿主)

简介:

Basic验证方式是基于用户名/密码的验证方式,在Windows环境下,我们提供的是有效的Windows用户名和密码。但是Basic身份验证方式和Windows身份验证方式是有本质上的区别的。Basic是Http安全规范(RFC 2617),不同的互联网应用体系都可以实现和进行Basic身份验证。

我们使用代码清单11-89的配置在TransportCredentialOnly模式下启用Basic验证。

代码清单11-89 启用Basic验证


<basicHttpBinding>
<binding
name="basicBindingConf">
<security
mode="TransportCredentialOnly">
<transport
clientCredentialType="Basic">
</transport>
</security>
</binding>
</basicHttpBinding>

配置文件修改完毕之后,我们还需要配置IIS来支持Basic验证,这里我关闭其他所有验证方式,只开启基本验证,如图11-39。

clip_image002

图11-39 启用IIS基本身份验证

服务端配置完毕,在测试站点上更新服务,会看到更新后的配置文件,如代码清单11-90所示。

代码清单11-90 客户端配置Basic验证


<security mode="TransportCredentialOnly">
<transport
clientCredentialType="Basic" proxyCredentialType="None" realm=""/>
<message
clientCredentialType="UserName" algorithmSuite="Default"/>
</security>

上面配置中“realm”属性配置的是域信息。实际代表的是每次请求的根URL。

那么如何在在客户端传递验证信息呢?看代码清单11-91。

代码清单11-91 传递客户端Basic验证信息

   1:  
   2: public ActionResultIndex()
   3: {
   4: client.ClientCredentials.UserName.UserName="administrator";
   5: client.ClientCredentials.UserName.Password="xuan$%^hun456";
   6: stringhelloString=client.GetHello();
   7: ViewData["Message"]=helloString;
   8: returnView();
   9: }

从清单11-90中,我们可以看到,与Windows验证不同的是,使用了另一个对象来传递身份信息,client.ClientCredentials.UserName对。client.ClientCredentials.UserName的UserName属性和Password属性分别用来传递用户名和密码。

运行测试站点,结果如图11-40。

clip_image004

图11-40 Basic验证结果

我们再来分析下Basic验证方式是如何通过Http传输的,请求信息如代码清单11-92,应答信息如代码清单11-93。

代码清单11-92 Basic请求信息


POST http://wcfservicewebsite.com/HelloService.svc HTTP/1.1
Content-Type: text/xml; charset=utf-8
VsDebuggerCausalityData:
uIDPo9qmOexINPFJi+3tKDrHjuIAAAAA9X2d7hDLH0GIwSTCqNRNiRHsOF3Z8KRDvBWVY4qgV1EACQAA
SOAPAction: "http://tempuri.org/IHelloService/GetHello"
Authorization: Basic YWRtaW5pc3RyYXRvcjp4dWFuJCVeaHVuNDU2
Host: wcfservicewebsite.com
Content-Length: 133
Expect: 100-continue
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
<s:Envelope
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><GetHello
xmlns="http://tempuri.org/"/></s:Body></s:Envelope>

代码清单11-93 Basic应答信息


HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Sun, 26 Jun 2011 05:01:41 GMT
Content-Length: 237
<s:Envelope
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><GetHelloResponse
xmlns="http://tempuri.org/"><GetHelloResult>Hello:BS--YANGWENHAI\Administrator;type=Basic</GetHelloResult></GetHelloResponse></s:Body></s:Envelope>

我们先看请求信息,重点关注这一句:

Authorization: Basic YWRtaW5pc3RyYXRvcjp4dWFuJCVeaHVuNDU2。

这句话由三段组成,第一段Authorization:标志验证信息;第二段Basic:标志验证类型为Basic;第三段:YWRtaW5pc3RyYXRvcjp4dWFuJCVeaHVuNDU2,是一段Base64编码的文本,内容是什么呢?我们对其转码,结果如下:

administrator:xuan$%^hun456

可以看到这是由冒号(:)分割的用户名和密码。

我们在看响应数据,验证通过之后直接返回结果,那么如果验证不通过呢?我们修改客户端提供的密码信息,再次提交请求,看结果如何。

调试捕获的异常信息如图11-41所示。

clip_image006

图11-41 Basic验证失败

图11-41通知客户端验证失败,同时我们还可以看到当我们不在配置文件和IIS中配置域信息时,IIS会自动将请求的域信息填充的头部。现在我们再看捕获的Http信息。响应信息如代码清单11-94。

代码清单11-94 Basic验证失败响应信息


HTTP/1.1 401 Unauthorized
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
WWW-Authenticate: Basic realm="wcfservicewebsite.com"
X-Powered-By: ASP.NET
Date: Sun, 26 Jun 2011 05:27:25 GMT
Content-Length: 6329

返回的信息,第一行错误码为“401”,解释为“Unauthorized”。加粗的一行标识了具体验证失败的信息,WWW-Authenticate是标准的验证响应头字段,Basic表明验证方式为“Basic”,realm表明未通过验证的域为“wcfservicewebsite.com”。


本文转自悬魂博客园博客,原文链接:http://www.cnblogs.com/xuanhun/archive/2011/06/30/2094825.html,如需转载请自行联系原作者

相关文章
|
机器学习/深度学习 安全 大数据
揭秘!企业级大模型如何安全高效私有化部署?全面解析最佳实践,助你打造智能业务新引擎!
【10月更文挑战第24天】本文详细探讨了企业级大模型私有化部署的最佳实践,涵盖数据隐私与安全、定制化配置、部署流程、性能优化及安全措施。通过私有化部署,企业能够完全控制数据,确保敏感信息的安全,同时根据自身需求进行优化,提升计算性能和处理效率。示例代码展示了如何利用Python和TensorFlow进行文本分类任务的模型训练。
1217 6
|
域名解析 负载均衡 安全
DNS技术标准趋势和安全研究
本文探讨了互联网域名基础设施的结构性安全风险,由清华大学段教授团队多年研究总结。文章指出,DNS系统的安全性不仅受代码实现影响,更源于其设计、实现、运营及治理中的固有缺陷。主要风险包括协议设计缺陷(如明文传输)、生态演进隐患(如单点故障增加)和薄弱的信任关系(如威胁情报被操纵)。团队通过多项研究揭示了这些深层次问题,并呼吁构建更加可信的DNS基础设施,以保障全球互联网的安全稳定运行。
|
机器学习/深度学习 人工智能 安全
TPAMI:安全强化学习方法、理论与应用综述,慕工大、同济、伯克利等深度解析
【10月更文挑战第27天】强化学习(RL)在实际应用中展现出巨大潜力,但其安全性问题日益凸显。为此,安全强化学习(SRL)应运而生。近日,来自慕尼黑工业大学、同济大学和加州大学伯克利分校的研究人员在《IEEE模式分析与机器智能汇刊》上发表了一篇综述论文,系统介绍了SRL的方法、理论和应用。SRL主要面临安全性定义模糊、探索与利用平衡以及鲁棒性与可靠性等挑战。研究人员提出了基于约束、基于风险和基于监督学习等多种方法来应对这些挑战。
525 2
|
安全 Java 编译器
Java 泛型深入解析:类型安全与灵活性的平衡
Java 泛型通过参数化类型实现了代码重用和类型安全,提升了代码的可读性和灵活性。本文深入探讨了泛型的基本原理、常见用法及局限性,包括泛型类、方法和接口的使用,以及上界和下界通配符等高级特性。通过理解和运用这些技巧,开发者可以编写更健壮和通用的代码。
345 1
|
安全 网络安全 Android开发
深度解析:利用Universal Links与Android App Links实现无缝网页至应用跳转的安全考量
【10月更文挑战第2天】在移动互联网时代,用户经常需要从网页无缝跳转到移动应用中。这种跳转不仅需要提供流畅的用户体验,还要确保安全性。本文将深入探讨如何利用Universal Links(仅限于iOS)和Android App Links技术实现这一目标,并分析其安全性。
2656 0
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
911 140
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
550 2
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1452 29
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
575 4
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

推荐镜像

更多
  • DNS