WCF BasicHttpBinding 安全解析(4)windows验证(IIS宿主)

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介:

  现在我们讨论TransportCredentialOnly安全模式下的安全配置,首先在配置文件中添加如代码清单11-84所示的配置节,配置windows验证。Windows凭据认证是基于Windows组账户或者域账户进行认证的方式。在这种认证方式下,客户端进程运行的Window帐号对应的Windows凭证被自动作为调用服务的客户端凭证,所以无需显示指定具体的Windiws凭证。如果需要另一个Windows帐号的名义调用服务,客户端就需要通知指定Windows帐号和密码的方式显式地进行客户端Windows凭证的设置。Windows凭证在WCF通过类型WindowsClientCredential表示。真正的凭证最终保存在类型为NetworkCredential的ClientCredential属性中。通过该属性,你可以指定Windows凭证的域名、用户名和密码。

注:

TransportCredentialOnly安全模式是明文传输,这里是为了查看通信细节才采用这种方式,实际场景不推荐使用。

代码清单11-84 配置windows验证

   1: <bindings>
   2:  
   3:     <basicHttpBinding>
   4:  
   5:       <binding name="basicBindingConf">
   6:  
   7:         <security mode=" TransportCredentialOnly" >
   8:  
   9:           <transport clientCredentialType="Windows">
  10:  
  11:           </transport>
  12:  
  13:         </security>
  14:  
  15:       </binding>
  16:  
  17:     </basicHttpBinding>
  18:  
  19:   </bindings>

看清单11-84,通过<ecurity mode=" TransportCredentialOnly ">”设置安全模式为TransportCredentialOnly,然后通过设置<transport clientCredentialType="Windows">设置客户端凭据类型为Windows。此外我们需要设置站点的认证模式为Windows,设置方式如代码清单11-85。

代码清单11-85 设置站点的认证模式为Windows

   1: <system.web>
   2:  
   3:   <authentication mode="Windows"></authentication>
   4:  
   5: </system.web>

服务端更改完毕之后,还有确保IIS开启了Windows认证。最后我们更新客户端的服务引用,右键服务引用,然后单击“更新服务引用”,我们会看到如图11-36所示的弹出框。

clip_image002

图11-36 更新服用引用需要验证凭据

输入验证信息之后,客户端的安全配置更新为代码清单11-86所示的内容。

代码清单11-86 windows认证时客户端安全配置

   1: <security mode="TransportCredentialOnly">
   2:  
   3:           <transport clientCredentialType="Windows" proxyCredentialType="None"
   4:  
   5: alm="" />
   6:  
   7:           <message clientCredentialType="UserName" algorithmSuite="Default" />
   8:  
   9:         </security>

我们传递一个错误的用户账户信息,启动测试站点,会得到如图11-37所示的错误信息。

clip_image004

图11-37 windows身份验证未通过

图11-37所示的错误信息是因为客户端未提供正确的身份验证信息导致的。实际上客户端和服务端经过了三次协商,最后一次的服务端响应信息如代码清单11-87。

代码清单11-87 验证失败的服务端响应信息头

HTTP/1.1 401 Unauthorized
 
Cache-Control: private
 
Content-Type: text/html; charset=utf-8
 
Server: Microsoft-IIS/7.5
 
WWW-Authenticate: Negotiate
 
WWW-Authenticate: NTLM
 
X-Powered-By: ASP.NET
 
Date: Sat, 25 Jun 2011 10:44:49 GMT
 
Content-Length: 6331
 
Proxy-Support: Session-Based-Authentication

返回401权限验证失败的信息,验证标头为Negotiate和NTLM。

Negotiate 身份验证协议包是 Windows 中的一个安全支持提供程序 (SSP),它提供身份验证和加密。它的作用是基于客户端计算机和服务器上支持的协议协商要用于身份验证请求的身份验证协议。在 Windows 7 和 Windows Server 2008 R2 之前的 Windows 版本中,Negotiate 包支持 NTLM 和 Kerberos。对于 Windows 7 和 Windows Server 2008 R2,已经对 Negotiate 包进行了更新,以支持更多 SSP。

出现上面的错误信息实际上是因为我的IIS的Windows验证默认提供成为Negotiate和NTLM,当然我们还可以添加Kerberos验证方式。

那个如何在客户端附加Windows身份验证信息呢?代码清单11-88是修改后的客户端代码。

代码清单11-88 设置windows账户信息

public ActionResult Index()

{

client.ClientCredentials.Windows.ClientCredential.Domain = "corp.beisen.com";

client.ClientCredentials.Windows.ClientCredential.UserName = "yangwenhai";

client.ClientCredentials.Windows.ClientCredential.Password = "xuan$%^hun456";

string helloString = client.GetHello();

ViewData["Message"] = helloString;

return View();

}

在代码清单11-88中,我们通过设置client.ClientCredentials.Windows.ClientCredential的Domain属性来设置域信息,通过UserName属性设置用户名,通过Password属性设置密码。

说明:

正常情况下,客户端和服务器在同一个域环境中,是不需要传递用户名和密码的。

运行结果如图11-38。

clip_image006

图11-38 Windows验证


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

相关文章
|
9月前
|
存储 安全 API
[笔记]深入解析Windows操作系统《四》管理机制(三)
[笔记]深入解析Windows操作系统《四》管理机制(三)
|
20天前
|
存储 算法 C++
【Qt应用开发】复刻经典:基于Qt实现Windows风格计算器(加减乘除、删除、归零功能全解析)
在Qt中,"栈"的概念主要体现在两个层面:一是程序设计中的数据结构——栈(Stack),二是用户界面管理中的QStackedWidget控件。下面我将分别简要介绍这两个方面:
|
1月前
|
网络协议 Linux 编译器
【原创】EtherCAT主站IgH解析(二)-- 如何将Igh移植到Linux/Windows/RTOS等多操作系统移植指南
EtherCAT主站方案对比:商业的如Acontis、TwinCAT3和开源的igh、SOEM。SOEM易移植但功能和实时性不足,适合简单应用;igh功能强大,实时性能优秀,基于内核态,适合复杂场景。igh能移植到其他RTOS,但需克服多任务无调度的挑战。依赖操作系统服务如定时器、内存分配,适合Linux内核,但移植到裸机复杂。
|
2月前
|
网络协议 Windows
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
|
7月前
|
C语言 Windows
9.3 Windows驱动开发:内核解析PE结构节表
在笔者上一篇文章`《内核解析PE结构导出表》`介绍了如何解析内存导出表结构,本章将继续延申实现解析PE结构的PE头,PE节表等数据,总体而言内核中解析PE结构与应用层没什么不同,在上一篇文章中`LyShark`封装实现了`KernelMapFile()`内存映射函数,在之后的章节中这个函数会被多次用到,为了减少代码冗余,后期文章只列出重要部分,读者可以自行去前面的文章中寻找特定的片段。
35 0
9.3 Windows驱动开发:内核解析PE结构节表
|
7月前
|
存储 Windows
9.2 Windows驱动开发:内核解析PE结构导出表
在笔者的上一篇文章`《内核特征码扫描PE代码段》`中`LyShark`带大家通过封装好的`LySharkToolsUtilKernelBase`函数实现了动态获取内核模块基址,并通过`ntimage.h`头文件中提供的系列函数解析了指定内核模块的`PE节表`参数,本章将继续延申这个话题,实现对PE文件导出表的解析任务,导出表无法动态获取,解析导出表则必须读入内核模块到内存才可继续解析,所以我们需要分两步走,首先读入内核磁盘文件到内存,然后再通过`ntimage.h`中的系列函数解析即可。
56 0
9.2 Windows驱动开发:内核解析PE结构导出表
|
7月前
|
网络协议 测试技术 网络安全
2022年中职“网络安全“江西省赛题解析—B-1:Windows操作系统深入
2022年中职“网络安全“江西省赛题解析—B-1:Windows操作系统深入
67 1
|
9月前
|
数据安全/隐私保护 Android开发 iOS开发
解决第三方邮箱APP登陆QQ、163邮箱无法验证账户名或密码的问题(IOS、MacOS、Windows、Android)
解决第三方邮箱APP登陆QQ、163邮箱无法验证账户名或密码的问题(IOS、MacOS、Windows、Android)
159 0
|
9月前
|
存储 安全 API
[笔记]深入解析Windows操作系统《四》管理机制(二)
[笔记]深入解析Windows操作系统《四》管理机制(二)
|
9月前
|
存储 安全 数据库
[笔记]深入解析Windows操作系统《四》管理机制(一)
[笔记]深入解析Windows操作系统《四》管理机制