WCF安全 - 如何允许所有呼叫者使用此URL?

时间:2010-02-01 15:40:46

标签: wcf security ssl authorization

我在Windows服务环境中自我托管的WCF服务可以在http上正常工作;通过https我无法在运行silverlight应用程序(或只是在IE中打开页面)时看到Windows登录提示而无法访问一个URL。我正在使用IPolicyRetriever接口来确保为Silverlight应用程序找到ClientAccessPolicy.xml文件。这工作正常。

有问题的服务定义了两个端点:

<service behaviorConfiguration="defaultBehavior" name="WCFServices.Scheduler">
<endpoint address="WCFServices/Scheduler/" binding="wsHttpBinding" bindingConfiguration="dBinding" contract="WCFServices.IScheduler" />
<endpoint address="" binding="webHttpBinding" contract="WCFServices.IPolicyRetriever" behaviorConfiguration="PolicyBehavior" bindingConfiguration="dBinding" />
    <host>
      <baseAddresses>
        <add baseAddress="https://myservername.org/" />
      </baseAddresses>
    </host>
  </service>

如果我转到https://myservername.org/,我会看到测试服务前端(带有指向wsdl的链接)。这暴露了Silverlight应用程序用于下拉策略文件的根IPolicyRetriever实例。我可以在没有任何登录提示的情况下加载显示WCF服务的此URL和其他URL。但是,如果我在IE 8中转到https://myservername.org/WCFServices/Scheduler/,我会看到Windows登录。如果我重置服务和客户端上的安全设置以使用http,我可以在没有登录提示的情况下转到后一个URL,并且silverlight应用程序按预期运行。我怀疑它与这个WCF服务有关,它是唯一一个定义了两个端点的服务(这个windows服务托管另外5个WCF服务,所有这些服务都只定义了1个端点)。我错过了一些授权规则吗?我不明白这是怎么回事,因为所有其他服务都没有提示加载。

我将不胜感激任何帮助。我需要完整的https://myservername.org/WCFServices/Scheduler/来提供WCF服务,而无需登录。感谢您花时间阅读本文。

就安全性而言,我只将此作为我的约束力:

<binding name="dBinding" maxBufferPoolSize="524288" maxReceivedMessageSize="6553600">
      <security mode="Transport">
      </security>
    </binding>

1 个答案:

答案 0 :(得分:0)

通过将这些行添加到我的安全绑定中解决了此问题:

<security mode="Transport">
   <transport clientCredentialType="None" proxyCredentialType="None"/>
</security>

...但这导致了许多其他问题,由于WCF日志记录,我已经能够处理所有这些问题。如果在调试WCF服务时遇到NOT FOUND(400)错误,请不要相信它。打开服务器端调试并填写生成的日志文件 - 您将到达底部。

我还应该注意到,当在Web浏览器中打开时,我发现第二个端点返回错误请求(400),这是BY DESIGN。第一个端点将在其wsdl中列出所有其他端点,您仍然可以在代理生成工具中使用其中任何端点。如果您在尝试直接在浏览器中访问它们时遇到错误的请求错误,请不要担心。