前言:
在《如何实现基于消息/传输安全验证机制下的username身份验证过程》已经介绍了如何通过消息安全模式进行username的身份验证过程,本文将继续介绍WCF支持的宁外一种身份验证机制-windows认证。
message security mode和transport security mode 下都支持windows验证。当然,支持windows验证的前提是WCF service和WCF client都必须在domain里面。这样当client请求时,服务器端才能将客户端身份映射成domain中相对应的windows帐号(kerberos或者NTLM)。
正文:
WCF service type的定义还是采用上篇的定义。为了看出程序的运行效果,我们将serviceType的constructor稍作修改,如下:
Code
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
public class MyMath:IMyMath
{
public MyMath()
{
System.Security.Principal.WindowsIdentity identity=System.ServiceModel.ServiceSecurityContext.Current.WindowsIdentity;
if (identity != null)
{
Console.WriteLine("welcome:{0}", identity.Name);
Console.WriteLine("MyMath constructor is called");
}
}
public int Sum(int x, int y)
{
return x + y;
}
}
其作用很简单,当客户端身份能够映射成相应windows帐号时,则在服务器端显示当前用户名。
windows验证模式的config如下:
主要是binding中的security修改为windows,如下:
Code
<bindings>
<wsHttpBinding>
<binding name="NewBinding0">
<security>
<message clientCredentialType="Windows" />
</security>
</binding>
</wsHttpBinding>
</bindings>
然后创建客户端程序,将wcf service启动之后,运行client,可以看到客户端身份被正确映射成windows域帐号。
运行时服务器端结果如下:
不进行任何验证(none)的配置:
Code
<bindings>
<wsHttpBinding>
<binding name="NewBinding0">
<security>
<message clientCredentialType="None" negotiateServiceCredential="false" />
</security>
</binding>
</wsHttpBinding>
</bindings>
运行结果如下: