开发者社区> 吞吞吐吐的> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介:
+关注继续查看

  现在我们讨论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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用windows 10系统自带的IIS搭建ftp服务器
使用windows 10系统自带的IIS搭建ftp服务器
0 0
阿里云国际版Windows系统的ECS实例访问IIS创建的网站访问提示“Bad Request (Invalid Hostname)”
本文www.123clouds.com介绍阿里云国际版Windows系统的ECS实例访问IIS创建的网站访问提示“Bad Request (Invalid Hostname)”时的解决办法。
0 0
阿里云国际版Windows实例中IIS网站设置禁止通过IP访问
本文www.123clouds.com介绍阿里云国际版Windows实例中如何设置IIS网站设置禁止通过IP访问。
0 0
阿里云国际版Windows服务器IIS下配置的FTP登录时提示“530 valid hostname is expected”错误
本文www.123clouds.com介绍阿里云国际版Windows服务器IIS下配置的FTP登录时提示“530 valid hostname is expected”错误的解决办法
0 0
Windows Server IIS配置 怎么禁用不安全的SSL2.0和SSL3.0协议?
Windows Server IIS配置 怎么禁用不安全的SSL2.0和SSL3.0协议?
0 0
Windows Server IIS配置 怎么禁用不安全的SSL2.0和SSL3.0协议?
Windows Server IIS配置 怎么禁用不安全的SSL2.0和SSL3.0协议?
0 0
Windows下Apache与IIS共存配置
Windows下Apache与IIS共存配置
0 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
ECS运维指南之Windows系统诊断
立即下载
TAKING WINDOWS 10 KERNEL
立即下载
《云服务器运维之Windows篇》
立即下载