对于通过GET接受命令的简单HTTP服务(实际上应该考虑使用POST ...)我会直接使用ASP MVC,而不是真正的 'web服务'。 WCF希望引导你走上SOAP的道路,你的客户将永远诅咒你。 RESTful WCF也是一种替代方案,但它看起来似乎还是矫枉过正。
至于验证,您有两个可行的身份验证方案:
- Windows集成的安全性,如果客户端是内部局域网或使用VPN或DirectAccess的解决方案
- HTTP摘要,这是连接这只会工作ASP身份验证模式支持不佳(仅支持对Active Directory林用户群进行身份验证)。
使用Windows身份验证,您不需要对服务器端代码执行任何操作,只需标记web.config <authentication mode="Windows" />
即可。 'Windows'认证被大多数用户代理理解。将您的服务的客户端编程为使用Windows身份验证也很简单,只需将请求的Credentials设置为当前用户DefaultCredentials即可。
使用摘要式身份验证服务器将挑战用户代理进行身份验证,但不幸的是,如我所说,ASP验证只适用于验证受信任的NT域。客户端虽然不需要在Intranet中(客户端和服务器之间没有NTLM SSPI交换)。编写一个客户端是faily容易,在.net中只需设置requet凭据正确初始化CredentialsCache:
CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri("http://www.contoso.com/"),"Digest", new NetworkCredential(UserName,SecurelyStoredPassword,Domain));
...
request.PreAuthenticate = true;
request.Credentials = myCache;
重用请求之间的缓存是很重要的,否则客户端会做两往返每次调用。
理论上你也可以有第三个认证路径:全双工SSL。但是,客户端证书部署的“微不足道”问题使得对于任何缺少完全预装的企业PKI的人来说,这种替代方案都是一个死路一条。