2

如何配置托管在 IIS 7 中的 wcf 服务以仅允许定义的用户/组访问。

现有配置:

<authentication mode="Windows"/> 

<services>     
 <service name="MyService.Test" behaviorConfiguration="MyService.TestBehavior">
  <endpoint address="" binding="wsHttpBinding" contract="MyService.ITest">
   <identity>
    <dns value="localhost"/>
   </identity>
  </endpoint>
  <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
 </service>
</services>
<behaviors>
 <serviceBehaviors>
  <behavior name="MyService.TestBehavior">
   <serviceMetadata httpGetEnabled="true"/>
   <serviceDebug includeExceptionDetailInFaults="true"/>          
  </behavior>        
 </serviceBehaviors>
</behaviors>

然后,我想在 web.config 或文件系统中的文件或文件夹中配置权限(用户或组)。

4

1 回答 1

2

首先,如果您在 Intranet 环境中,您可以并且应该切换到 netTcpBinding - 它更快,更灵活,没有人可以从外部(超出您的防火墙)调用 - 完美。

接下来 - 默认情况下,您使用 wsHttpBinding 和 netTcpBinding 打开 Windows 凭据。在 WCF 世界中,您通常不会保护文件或文件夹 - 您需要保护的是服务调用 - 使用 Windows 凭据很容易做到这一点 - 只需将 PrincipalPermission 属性添加到您的服务实现中,您就完成了:

class MyService : IMyService
{
  [PrincipalPermission(SecurityAction.Demand, Role="SysAdmin")]
  public void SensitiveMethod()
  {
   ....
  }
}

应该工作得很好。

如果您确实需要保护文件和文件夹,您始终可以使用 web.config 文件并根据 Windows 用户名和组指定通常的访问权限——但这实际上与 WCF 无关。

马克

于 2009-07-22T17:27:12.403 回答