WCF通过Windows服务 - 身份验证客户端
问题描述:
我是WCF /安全新手。我创建了一个通过Windows服务托管的WCF服务。 WCF服务从通过Windows身份验证保护的第三方数据源获取数据。我需要:WCF通过Windows服务 - 身份验证客户端
通过Windows服务通过客户端的权限,通过WCF服务,并为第三方数据源,或...
限制谁可以调用Windows服务/ WCF服务给特定AD组的成员。
有关如何执行这些任务的任何建议?
答
这是在企业内部网/企业防火墙情况下吗?
如果是这样,我会使用netTcp绑定(在这种情况下最快)与传输安全和Windows客户端凭据。在这种情况下,调用者的Windows凭据将被传递到您的WCF服务中。
使用标准的基于角色的安全性,则可以限制主叫方利用主权限来决定服务的方法 - 你可以声明限制谁可以这样调用一个方法:
[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>
谢谢!我现在远离代码,但会试一试。我正在使用netTcp,但我有一种感觉,我没有正确配置传输安全性和Windows客户端凭证,因为wcf wervice正在使用主机凭证。明天/周一我会玩这个。这两件事情的任何指针? – Sean 2010-04-11 01:27:20