现在我们讨论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所示的弹出框。

图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所示的错误信息。

图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。

图11-38 Windows验证

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

WCF BasicHttpBinding 安全解析(4)windows验证(IIS宿主)相关推荐

  1. WCF BasicHttpBinding 安全解析(3)默认安全设置(IIS宿主)

    本节开始的实例采用IIS作为WCF宿主,使用的契约和实现和前面使用的仍然相同,下面我们构建两个站点,一个WCF服务宿主站点,一个服务测试站点.首先我们创建服务端,打开vs2010à文件à新建项目à选择 ...

  2. WCF BasicHttpBinding 安全解析(1)BasicHttpBinding基本配置

    BasicHttpBinding使用HTTP作为传输协议用于发送SOAP 1.1消息.服务可以使用此绑定来公开符合WS-I BP 1.1标准的终结点,如ASMX客户端访问的终结点.同样,客户端可以使用 ...

  3. Windows 08R2 IIS网站架设

    目录 目录 配置和安装IIS 环境设置 安装IIS服务器 网站的站点目录和欢迎页面 配置和安装IIS IIS是Windows的网站服务器,所以配置IIS服务的前提是需要一个网址.和DNS域名并添加主机 ...

  4. Windows Server+IIS+ASP+MSSQL2K+ServU 系统整合安全方案(转)

    1     前言 在这混的久了收获很多,感觉不发点东西就对不起这里的兄弟姐妹,因此就把我对Windows系统配置的一点经验共享一下.希望对初学者有点帮助!^_^          Windows 系统 ...

  5. 宝塔面板windows建站教程_宝塔Windows面板IIS环境如何建立博客网站

    摘要: 简介Windows系统服务器一般都是安装 IIS环境,其他两个环境(Apache 和 Nginx)一般是在 Linux 服务器上运行会比windows更稳定,windows系统推荐... 简介 ...

  6. 基于net.tcp的WCF配置实例解析

    开通黄钻 基于net.tcp的WCF配置实例解析 本文主要通过文件配置来讲解如何编写一个基于net.tcp的Windows Form小程序. 使用的工具 涉及的工具有: SvcUtil.exe WCF ...

  7. 使用windows验证(Using Windows Authentication)【转】

     使用windows验证(Using Windows Authentication) 在软件术语里面,验证的意思是测定身份.这个跟授权是完全分开的,授权是让合适的人做合适的事情,授权通常在验证之后 ...

  8. SharePoint 客户端经常弹出Windows验证登录框问题

    场景描述: Site工作人员UserA创建了一个Task,并且Assign给UserB.UserB接到来自Task List的邮件通知.这时UserA发现Assign的人错了,重新修改Task Ite ...

  9. Windows+Nginx+IIS做图片分布式存储详细步骤

    最近几天,一直在学习nginx在windows平台下的使用,为了寻找几种大量图片分布式存储而且有相对简单的存储方案 nginx是一种,还找到一种MongoDB GridFS 这两种方案我还是比较中意的 ...

最新文章

  1. python成绩统计_python学习-统计学生成绩-统计学生成绩
  2. jquery click 第一次没用_【通知】同济大学研究生会20202021学年第一次主席联席会...
  3. tensorflow 读取cifar_浅入浅出TensorFlow 4 - 训练CIFAR数据
  4. 为什么redis取出来是null_跳表:为什么Redis一定要用跳表来实现有序集合
  5. ECCV 2020 Spotlight | 多标签长尾识别前沿进展
  6. 如何获取上传文件的本地路径
  7. Perl的浅拷贝和深度拷贝
  8. C#算法设计排序篇之11-二叉树排序(附带动画演示程序)
  9. java holder_Java DataHolder.supports方法代码示例
  10. ios 数字键盘左下角添加按钮_ios数字键盘添加完成按钮
  11. javascript中for循环里面套定时器,始终打印结束值原因
  12. MFC在一个工程中启动其他工程的exe文件
  13. Python骚操作,生成WiFi二维码,扫描一键联网
  14. 使用clusterProfiler进行KEGG富集分析
  15. 怎么用ping命令测试网速
  16. svn 重新定位版本库
  17. Android Hotfix 新方案——Amigo 源码解读
  18. PHP文件绕过后缀执行配置
  19. 怎么批量设置EDIUS中的图片持续时间
  20. Adobe Animate把.fla文件导出透明背景图片

热门文章

  1. find命令中的-print -exec -ok参数区别
  2. 修改CentOS7网卡名称为传统名称eth0格式(20170711更新)
  3. [Linux学习]虚拟机系统与实际系统共享文件的方式
  4. 百度搜索技巧语法大全
  5. 北电PBX资料_LD 11數位電話機設定
  6. Linux内核之于红黑树and AVL树
  7. 第一次阅读java,net.ServerSocket
  8. linux下mysql的root密码忘记解决方
  9. ubuntu相关命令
  10. SWAP使用情况以及muma介绍