【发布时间】:2009-10-03 01:24:09
【问题描述】:
我正在构建一个具有 Web、Windows 和移动 (iPhone) 客户端的应用程序,我想使用 WCF 来实现服务层并且不熟悉 WCF 在安全性、身份验证和授权。
我通常希望尽可能多地重复使用 ASP.Net 成员组件,以节省我编写代码的时间,因为它繁琐且重复。这是一个好方法吗?有哪些替代方法?
谁能指导我如何最好地实现我的目标?
【问题讨论】:
我正在构建一个具有 Web、Windows 和移动 (iPhone) 客户端的应用程序,我想使用 WCF 来实现服务层并且不熟悉 WCF 在安全性、身份验证和授权。
我通常希望尽可能多地重复使用 ASP.Net 成员组件,以节省我编写代码的时间,因为它繁琐且重复。这是一个好方法吗?有哪些替代方法?
谁能指导我如何最好地实现我的目标?
【问题讨论】:
如果您在“ASP.NET 兼容模式”下运行 WCF(代码中的一个属性允许它,而一行配置来启用它),您可以将所有常见的 ASP.NET 安全机制与 WCF 一起使用:是。见http://msdn.microsoft.com/en-us/library/aa702682.aspx
【讨论】:
查看WCF security scenarios 上的这篇文章系列,其中解释了您应该采用的许多最佳实践。
您基本上有三种选择来保护您的客户端和服务器之间的消息传递:
通常,当您可以确定客户端和服务之间只有一个跃点时,您会倾向于使用传输级别(TCP/IP 级别)的安全性,例如在防火墙后面的公司 LAN 环境中。这是最快的 - 在您的公司 (Windows) LAN 环境中使用 netTcpBinding。
如果您可能有多个跃点(例如路由器、存储和转发中介等) - 通常是您的互联网/外部客户端场景 - 那么传输级安全性将不再起作用,因此您可能必须使用消息 -在消息从客户端传输到服务时,对消息本身进行加密和签名的级别安全性。
现在这只是关于在途中保护消息。
至于身份验证(知道它在呼叫您的是谁),您通常可以在您的 LAN/公司内使用 Active Directory/Windows 凭据,或外部客户端的用户名/密码(或可能用于相同目的的证书,尽管这有点更多的工作)。您还可以想象是否允许匿名用户不告诉您他们是谁 - 或拒绝他们 - 这取决于您。
一旦您知道它在呼叫您的是谁,您就可以进行授权 - 决定他们可以做什么。在这里,您通常会在公司/LAN 场景中使用 Active Directory 组成员身份,或者在其他场景中使用 ASP.NET 成员身份/角色系统。或者您可以自己滚动 - 这完全取决于您。
希望对您有所帮助,让您现在就开始!
马克
【讨论】: