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