配置WCF以忽略IIS中的身份验证要求

时间:2011-01-14 15:19:41

标签: wcf iis-7

情景:

  1. 共享相同wwwroot文件夹的两个网站(example.com,admin.example.com)。
  2. example.com仅允许匿名访问
  3. admin.example.com仅允许Windows身份验证。
  4. /Service/Awesome.svc返回一个json对象
  5. 使用example.com访问Awesome服务有效,而admin.example.com则抛出NotSupportedException; “此服务的安全设置需要”匿名“身份验证,但未对承载此服务的IIS应用程序启用。”

    <system.serviceModel>
      <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
                                 multipleSiteBindingsEnabled="true" />
    
      <behaviors>
        <serviceBehaviors>
          <behavior name="serviceBehavior">
            <serviceMetadata httpGetEnabled="true" />
            <serviceDebug includeExceptionDetailInFaults="true" />
          </behavior>
        </serviceBehaviors>
        <endpointBehaviors>
          <behavior name="jsonBehavior">
            <enableWebScript />
          </behavior>
        </endpointBehaviors>
      </behaviors>
    
      <services>
        <service name="WcfServices.AwesomeService"
                 behaviorConfiguration="serviceBehavior">
          <endpoint address="" binding="webHttpBinding" 
                    contract="WcfServices.IAwesomeService" 
                    behaviorConfiguration="jsonBehavior" />
        </service>
      </services>
    </system.serviceModel>
    

    如何配置WCF以忽略身份验证要求?我想要相同的行为,就像这是一个Web服务或处理程序,只需执行并返回真棒的json对象。

2 个答案:

答案 0 :(得分:0)

听起来你有两份服务副本,一份在example.com网站下,另一份在admin.example.com下。如果admin.example.com需要IIS集成(质询/响应)身份验证,那么您的WCF服务绑定需要处于传输模式,因为IIS要求所有admin.example.com资源都是Windows身份验证。试试这个配置:

<bindings>
  <basicHttpBinding>
    <binding name="Binding1">
      <security mode="TransportCredentialOnly">
        <transport clientCredentialType="Windows" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

如果这对你不起作用,你可能想尝试在他们自己的虚拟指南中托管服务,这样他们就不会受到网站安全需求的支配。

祝你好运。

答案 1 :(得分:0)

我觉得你在这里运气不好。授予AWesome.svc匿名访问权限,并允许匿名访问无法访问敏感资源的用户帐户。

相关问题