可以使用什么方法将WCF安全性扩展到当前域之外?

可以使用什么方法将WCF安全性扩展到当前域之外?,wcf,security,identity,Wcf,Security,Identity,WCF有一个丰富的安全模型,我希望每个人都能同意这一点。我最近遇到了这样一种情况:我们的客户端应用程序(基于WCF的应用程序,利用域内用户的凭据)需要与我们必须部署到域和控制之外的数据中心的服务进行通信。因此,这打破了我们的单点登录模式,我想知道你们中是否有人成功地将安全模型扩展到了域之外的服务 我们的身份模型依赖于IIdentity和IPrincipal类(而不是WindowsIdentity/WindowsPrincipal),因此使用替代身份实现是可以的。正如我的问题所暗示的,我没有答案,

WCF有一个丰富的安全模型,我希望每个人都能同意这一点。我最近遇到了这样一种情况:我们的客户端应用程序(基于WCF的应用程序,利用域内用户的凭据)需要与我们必须部署到域和控制之外的数据中心的服务进行通信。因此,这打破了我们的单点登录模式,我想知道你们中是否有人成功地将安全模型扩展到了域之外的服务

我们的身份模型依赖于IIdentity和IPrincipal类(而不是WindowsIdentity/WindowsPrincipal),因此使用替代身份实现是可以的。正如我的问题所暗示的,我没有答案,我希望你有答案。我曾经玩弄过的一个解决方案要求客户端以与现在相同的方式在我们的域中进行身份验证。作为身份验证的一部分,他们将获得由我们的CA签署的X.509证书(数据中心将信任该证书)。证书将存放在证书存储中(我相信有一个与.NET捆绑在一起,但我不清楚它是否能够在用户偶尔移动的环境中发挥作用),并在用户请求时创建/提供给用户

如果您有任何反馈和/或想法,我将不胜感激

编辑


除了远程数据中心之外,我们还有驻留在数据中心内的服务。我想提供一个只需要一次登录的解决方案(而且fwiw,我们的用户每次启动此应用程序时都必须输入用户名和密码)。

如果您在少数参与者之间有或多或少的点对点请求,比如在B2B环境中,那么证书无疑是一种选择。一切都是自动工作的——当然,一旦你把一切都设置好了!:-)

基本上,您的服务将有一个证书来进行自身身份验证,客户端也将有一个证书,该证书将被发送到服务并根据服务对客户端进行身份验证。在服务器端,您可以点击
ServiceSecurityContext.Current.PrimaryIdentity
访问调用者的
IIdentity

有关更多信息,请参阅以下参考资料:

  • -精彩的介绍
  • -非常广泛,非常完整
  • -关于场景驱动WCF安全性的优秀博客文章系列
  • -Juwal Lowy关于声明式WCF安全性的基本文章
希望这有点帮助

马克当然有帮助。关于如何将证书绑定到经过身份验证的用户的任何想法。请记住,用户必须从那里使用其域凭据登录,我可以使用证书对远程服务进行身份验证。我挂断的部分原因是管理域身份验证凭据和证书之间的关系。想法?您基本上有两种选择:(1)在您的终端创建Windows用户,并将证书映射到本地Windows用户并通过这种方式进行身份验证,或者(2)仅依赖证书-如果用户提供该证书,则他已通过身份验证。或者(3)-您还可以为每个用户创建单独的证书(如果您只有有限的用户数,这可以正常工作)并将他们的“SubjectName”(在他们的证书上)设置为特定的名称,然后根据有效用户列表签入您的代码-类似的事情。