WCF 身份验证错误

Posted

技术标签:

【中文标题】WCF 身份验证错误【英文标题】:WCF Authentication Error 【发布时间】:2011-02-16 01:26:56 【问题描述】:

我正在访问第三方 WCF 服务(我无权访问服务配置)我们正在使用 SSL 证书进行身份验证。

我在尝试访问任何提供的方法时遇到此错误

HTTP 请求未通过客户端身份验证方案“协商”进行授权。这 从服务器收到的身份验证标头是“协商,NTLM”

我检查了许多谷歌链接,但到目前为止没有运气 - 不知道我还能检查什么。

编辑

这里是配置

安全>
                绑定>
            绑定>
      
          
          端点>
      客户>

【问题讨论】:

您能否显示您尝试访问服务的代码,它看起来像是在要求 NTLM 身份验证 @Pharabus:你要我粘贴什么?客户端配置或一些 c# 代码?我会说我用于访问 Web 服务的代码是无关紧要的。我没有什么有用的东西可以展示。只是调用一个类的方法 :-( 没有安全设置 您需要一些安全设置才能通过 WCF 服务请求的身份验证。 我有所有被要求添加到 web.config 的设置。但是,如果您对我错过了什么有任何线索,请告诉我。 你能至少显示客户端的 web.config 吗? 【参考方案1】:

尝试将您的 clientCredentialType="Windows" 设置为 clientCredentialType="Certificate" 我通常使用硬编码的 WCF 配置,而不是配置文件,所以我不太确定,但无论哪种方式,请查看以下链接:@987654321 @在 MSDN 上。

祝你好运。我很惊讶您要连接的对象/对象没有给出明确的端点连接说明,但是,嘿,在使用 3rd 方的东西时,您会处理各种类型的问题。

【讨论】:

+1 感谢您的帮助,但我已经测试了您的建议(此时我应该仔细检查,因为我测试了很多东西)。我使用 svcutil.exe 生成了代理。此工具生成您需要粘贴到 web.config 上的配置(理论上)。但在这种情况下,生成的配置似乎并不准确。 svcutil.exe 没有完成 100% 的工作。并非客户端应用程序需要知道的所有内容都由服务元数据提供,因此您通常需要手动调整客户端配置。【参考方案2】:

好的,这可能有点含糊,所以我提前道歉,基本上服务器告诉你你没有被授权,通常为此你会在你生成的代理上添加类似下面的内容

svc.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

其中 svc 是您生成的代理。我还在一个配置错误的 IIS 托管端点上看到了这一点,其中虚拟文件夹没有允许匿名集(尽管您说您无法访问服务配置,因此这可能没有帮助)。希望这会有所帮助

编辑添加了更多信息,

根据安全性,类似下面的设置可能更有用

svc.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Anonymous;

编辑 2 上面的配置显示您正在使用的 wsHttpBinding 已将 Windows 设置为 clientCredentialtype 用于传输安全和用户身份验证,这意味着您将通过当前登录用户的凭据发送到服务以使用 NTLM 进行身份验证(因为协商服务凭据是true) 您是否确认登录的用户拥有该服务的权限?

【讨论】:

@Pharabus:谢谢,但没有运气。使用第二个设置,我得到“身份验证不支持 TokenImpersonationLevel.Anonymous 级别。”。第一个没有区别。请注意我正在使用 SSL 证书进行身份验证。 @Timmy O'Tool。是的,我确实看到了 SSL,但我不确定这是这里的问题,但是如果没有关于服务器期望什么样的身份验证以及如何配置客户端的具体信息,这是非常困难的。

以上是关于WCF 身份验证错误的主要内容,如果未能解决你的问题,请参考以下文章

WCF 错误:调用者未通过服务的身份验证

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

如何使用 AWS 身份验证保护我的 wcf 服务

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

WCF 身份验证 - 验证消息的安全性时出错

添加 WCF 服务引用时,HTTP 请求被客户端身份验证方案“匿名”错误禁止