如何禁用 WCF 数据服务的身份验证方案

Posted

技术标签:

【中文标题】如何禁用 WCF 数据服务的身份验证方案【英文标题】:How to disable authentication schemes for WCF Data Services 【发布时间】:2011-02-02 06:46:55 【问题描述】:

当我将 WCF 数据服务部署到生产托管时,我开始收到以下错误(或类似错误,具体取决于激活的身份验证方案):

IIS 指定的身份验证方案 “基本,匿名”,但具有约束力 只支持精确的规范 一种身份验证方案。有效的 身份验证方案是摘要, 协商、NTLM、基本或匿名。 更改 IIS 设置,以便只有一个 使用单一身份验证方案。

显然 WCF 数据服务(通常是 WCF?)无法处理激活多个身份验证方案。

好的,所以我知道我可以通过 IIS 控制面板在 Web 应用程序上禁用唯一身份验证方案 .... 通过支持请求!!

有没有办法在 web.config 中的每个服务级别上指定单个身份验证方案?

我认为这可能与更改 <system.serviceModel> 一样简单,但是...事实证明 WCF 数据服务并未在 Web 配置中进行自我配置强>。如果您查看DataService<> 类,它没有实现[ServiceContract],因此您不能在<service><endpoint> 中引用它...我认为通过XML 更改其配置需要它。

附:我们的主机使用的是 II6,但 IIS6 和 IIS7 的两种解决方案都值得赞赏。

【问题讨论】:

【参考方案1】:

首先可以在网络配置文件中配置数据服务。 DataService 使用的契约称为 System.Data.Services.IRequestHandler。

这是您可以在 web 配置文件中进行的配置。

在 system.servicemodel 元素的服务标签上添加

<service name="you service type name including the namespace i.e. myapplication.myservice">
    <endpoint address="" binding="webHttpBinding" contract="System.Data.Services.IRequestHandler">
    </endpoint>
</service>

一旦你有了它,你就可以开始使用标准的 WCF 配置元素来配置各种方式。

其次,要在 IIS 中启用或禁用特定服务的身份验证方法,您可以执行以下操作:

在 IIS 管理单元上,右键单击您的服务文件(即 yourservice.svc)并单击属性。 进入属性后,转到文件安全选项卡并选择身份验证和访问控制组框上的编辑按钮。之后就像在 IIS 中设置目录安全一样。

作为任何故障排除的最后一个建议,在使用 xml 配置进行配置时启用 wcf 诊断非常重要,它是用 WCF 编写的,根据 wcf 的数据服务日志记录非常丰富且信息量很大。

您可以在WCF Administration and Diagnostics上找到更多相关信息

希望能帮到你

让我知道事情的进展。

问候

丹尼尔·波特拉

更新:

你好施耐德

在下面读取的xml中指定身份验证方案

以windows认证为例

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="MyBindingName" >
          <security mode="Transport">
            <transport clientCredentialType="Windows" />
          </security>
        </binding>
      </webHttpBinding>
    </bindings>
    <services>
      <service name="you service type name including the namespace i.e. myapplication.myservice">
        <endpoint address="" binding="webHttpBinding" bindingConfiguration="MyBindingName" contract="System.Data.Services.IRequestHandler">
        </endpoint>
      </service>
    </services>
  </system.serviceModel>
</configuration>

对于其他类型的身份验证,请查看 MSDN 库中的示例

Common Scenarios for security

【讨论】:

谢谢。端点配置很有用。现在我有了,我将寻找一种在 xml 中指定身份验证方案的方法... 在上面添加更新希望解释如何为服务设置身份验证 如果可以的话,我会给你赏金..!非常感谢! 感谢 Rashack 对答案进行投票就足以确保其他人可以看到它的帮助,并让社区相信问题已得到解决

以上是关于如何禁用 WCF 数据服务的身份验证方案的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WCF 服务中实现自定义身份验证

为简单的 WCF 服务打开基本身份验证?

WCF - Windows 身份验证 - 安全设置需要匿名

WCF如何传递令牌进行身份验证?

如何对 WCF 数据服务进行身份验证?

.net 核心中调用 wcf 的身份验证方案