2010-04-19 57 views
0

我想用Visual Studio编写一个Web服务。该服务需要支持某种类型的身份验证,并且应该能够通过简单的HTTP GET请求接收命令。输入只能是一个带有一些参数的方法调用,并且响应将是简单的状态/错误代码。我的直觉是使用ASP.NET Web服务,但这不是C#4.0中的选项,它让我怀疑是否应该使用更新的东西。我已经看过WCF,但它似乎需要在客户端运行的应用程序 - 有没有办法通过访问URL来查询WCF主机?我应该将什么类型的Web服务放在一起?

认证也是一个重要的部分。开发我自己的小身份验证系统似乎是一个坏主意 - 我读过它太容易搞砸了。用这种Web服务进行身份验证的标准方式是什么?

我很想查看所有关于这个的细节并自己学习,但我真的不知道从哪里开始。一些方向将不胜感激!

回答

1

对于通过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的人来说,这种替代方案都是一个死路一条。

相关问题