我有一个WCF自托管Web服务(在Windows服务中以“本地系统”帐户托管)。 Web方法已附加GET /api/1
。使用NTLM身份验证。
在我的Web方法的实现中,我模拟了调用者并做一些事情。为此,我使用[OperationBehaviorAttribute(Impersonation = ImpersonationOption.Required)]
。如果在调用Web方法时未提供适当的凭据,则Web服务将返回“ 401未经授权”。
当我从Chrome调用该方法时,Windows身份和模拟非常有用。我可以在模拟用户下创建一个新进程,该进程将在该用户的Windows会话中生成(不同于0)。当我在“ ServiceSecurityContext.Current.WindowsIdentity
”首选项中添加“ localhost”字符串时,Firefox也可以工作。但是,当SoapUI调用该方法时,则无法正确设置此Windows身份。调用了Web方法,因此NTLM可以在某种程度上起作用,但是它不能正常工作。调用network.automatic-ntlm-auth.trusted-uris
返回false(ServiceSecurityContext.Current.WindowsIdentity.Owner.IsAccountSid()
不是用户帐户,而是内置的“管理员”组)。在模拟时创建新进程将在Windows会话0中创建它。
我研究了与Wireshark的HTTP通信,并且Chrome和SoapUI之间的NTLM握手看起来有所不同。不知道该如何处理这些信息。
如何使SoapUI与我的Web服务和NTLM正常工作?
答案 0 :(得分:0)
虽然我不知道如何使用WCF解决问题,但我切换到了Web API和OWIN,现在我有了一个可行的解决方案。