wcf wsHttpBinding并禁用匿名访问

时间:2008-10-23 01:58:03

标签: wcf iis-6

http://blogs.msdn.com/drnick/archive/2007/03/23/preventing-anonymous-access.aspx

有人可以澄清是否可以在WCF中使用wsHttpBinding并在IIS中禁用匿名访问而不需要传输(ssl)或消息安全性?

2 个答案:

答案 0 :(得分:3)

你是对的,afaik在你描述的场景中wsHttpBinding要求我们使用内部WCF安全堆栈。所以你通常会做的是

  • 启用匿名访问
  • 使用< serviceAuthorization principalPermissionMode =“UseWindowsGroups”/>
  • 创建一个serviceBehavior
  • 使用PrincipalPermissionAttribute注释服务方法的每个具体实现,这是一个非常强大的工具,有许多不同的选项来控制访问

这对您来说是否是可接受的解决方案还是还有其他需要考虑的事项吗?

基本示例:

public class TestService : ITestService
{
  [PrincipalPermission(SecurityAction.Demand, Name = "testdomain\\administrator")]
  public string DoWork()
  {   
    return "Hello World " + Thread.CurrentPrincipal.Identity.Name;
  }
}

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WcfSecurity.Www.TestServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
          <serviceAuthorization principalPermissionMode="UseWindowsGroups" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="WcfSecurity.Www.TestServiceBehavior" name="WcfSecurity.Www.TestService">
        <endpoint address="" binding="wsHttpBinding" contract="WcfSecurity.Www.ITestService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>    
  </system.serviceModel>

答案 1 :(得分:0)

我们希望使用windows集成安全性。如果您在IIS中禁用匿名访问并仅允许Windows,则在不使用某些安全模式(例如需要ssl的transprot安全性)的情况下,您似乎无法将WsHttpBinding与WCF一起使用。

我们只想使用Windows身份验证,我们不一定要使用ssl来实现传输安全性。

我有点惊讶这是不可能的开箱即用(似乎通过我的链接确认),因为它似乎是实习应用程序的常见情况。

我们不想降级到仅支持Windows身份验证的basicHttpBinding。