我是WCF / Security Newb。我创建了一个通过Windows服务托管的WCF服务。 WCF服务从通过Windows身份验证保护的第三方数据源中获取数据。我需要:
通过Windows服务,WCF服务和第三方数据源传递客户端权限,或者......
限制谁可以将Windows服务/ WCF服务调用给特定AD组的成员。
有关如何执行这些任务的任何建议吗?
答案 0 :(得分:5)
这是在Intranet /公司后防火墙场景中吗?
如果是这样,我将使用netTcp绑定(在这种情况下最快)与传输安全性和Windows客户端凭据。在这种情况下,调用者的Windows凭据将被传递到您的WCF服务。
使用标准的基于角色的安全性,您可以使用Principal权限将调用者限制为给定的服务方法 - 您可以声明性地限制谁可以调用这样的方法:
[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
[PrincipalPermission(SecurityAction.Demand, Name = "JohnDoe")]
public void YourSensitiveMethod();
或者您可以通过编程方式检查服务方法中是否存在WindowsIdentity
并执行您想要执行的操作:
if(ServiceSecurityContext.Current.WindowsIdentity != null)
{
WindowsPrincipal principal = new WindowsPrincipal(ServiceSecurityContext.Current.WindowsIdentity);
if(!principal.IsInRole("Administrators")
{
return; // or throw a FaultEXception or something
}
}
这有帮助吗?
更新:与WCF和安全性相关的所有事物的最终资源将是Codeplex上的WCF Security Guidance。您应该在该页面上找到几乎所有的样本和操作方法(以及对它们的解释!)。
要使用传输安全性和Windows身份验证作为客户端凭据保护netTcpBinding,请使用此绑定配置:
<bindings>
<netTcpBinding>
<binding name="SecuredByWindows">
<security mode="Transport">
<transport clientCredentialType="Windows"/>
</security>
</binding>
</netTcpBinding>
</bindings>