从 SoapUI 调用 Web 方法时模拟失败

Impersonation fails when calling web method from SoapUI

我有一个 WCF 自托管 Web 服务(托管在我的 Windows 本地系统帐户下的服务中)。 Web 方法已附加 [OperationBehaviorAttribute(Impersonation = ImpersonationOption.Required)]。使用 NTLM 身份验证。

在我的 web 方法的实现中,我模拟了调用者并做了一些事情。为此,我使用 ServiceSecurityContext.Current.WindowsIdentity。如果我在调用 web 方法时没有提供正确的凭据,则 web 服务将 return“401 Unauthorized”。

当我从 Chrome 调用方法时,windows 身份和模拟效果很好。我可以在模拟用户下创建一个新进程,它将在该用户的 Windows 会话中产生(不同于 0)。当我将 "localhost" 字符串添加到 network.automatic-ntlm-auth.trusted-uris 首选项时,Firefox 也可以工作。但是当 SoapUI 调用该方法时,此 windows 标识未正确设置。 Web 方法被调用,因此 NTLM 在一定程度上起作用,但它不能正常工作。对ServiceSecurityContext.Current.WindowsIdentity.Owner.IsAccountSid()的调用returns false(Owner不是用户帐号,而是内置的"Administrators"组)。在模拟时创建一个新进程将在 Windows 会话 0 中创建它。

我研究了与 Wireshark 的 HTTP 通信,Chrome 和 SoapUI 之间的 NTLM 握手看起来不同。但是不知道如何处理这些信息。

如何使 SoapUI 与我的网络服务和 NTLM 一起正常工作?

虽然我不知道如何解决 WCF 的问题,但我切换到 Web API 和 OWIN,现在我有了一个可行的解决方案。