WCF通过Windows服务 - 验证客户端

时间:2010-04-10 16:04:56

标签: .net wcf security authentication

我是WCF / Security Newb。我创建了一个通过Windows服务托管的WCF服务。 WCF服务从通过Windows身份验证保护的第三方数据源中获取数据。我需要:

  1. 通过Windows服务,WCF服务和第三方数据源传递客户端权限,或者......

  2. 限制谁可以将Windows服务/ WCF服务调用给特定AD组的成员。

  3. 有关如何执行这些任务的任何建议吗?

1 个答案:

答案 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>