WCF:在同一端点上使用多个身份验证方案

WCF: Using Multiple Authentication Schemes on same endpoint

我有一个 WCF 服务,我将其托管为 Windows 服务。我需要在服务端点上同时支持 Windows 和 NTLM 身份验证。

我看到一个 MSDN 页面,它解释了与 .NET 4.5 完全相同的内容,这里是 link:

http://msdn.microsoft.com/en-us/library/hh556235(v=vs.110).aspx

据此,我在代码中配置了我的服务端点,如上述自托管服务部分所述link。但是,当我测试时这不起作用。我捕获了流量并观察到服务没有发送 HTTP 401 质询,而是直接失败并显示 HTTP 400 Bad Request 错误。我相信这应该是发送给客户端的 HTTP 401 质询。

我是不是漏掉了什么?

您可以在同一个 Windows 服务中使用多个身份验证方案 运行,但不能在同一个端点 - 这是不可能的。

例如,我可以创建 IIS 或自行托管一个名为 NeedHelp 的 Web 服务,该服务使用三种身份验证,这是我的端点:

http://NeedHelp:8001/NoAuth

http://NeedHelp:8002/WindowsAuth

http://NeedHelp:8003/CertAuth

所有这些都可以 运行 在同一个 Web 服务下,全部由 IIS 托管或作为 Windows 服务自行托管。但它们都需要单独的端口地址。

好吧,这是可能的,经过 4 天的努力,我可以让它工作,错误 HTTP Bad Request 并不表示问题所在。但是,当我使用 HttpGetEnabled 添加服务元数据行为时,它起作用了。

另外,如果您定义了 ServiceAuthenticationBehavior,请确保将 ClientCredentialType 标记为 InheritedFromHost。这将确保应用 ServiceAuthenticationBahavior 指示的身份验证方案。

希望这会为其他人节省 4 天! :)