0

我有一个客户端控制台应用程序,它有一些用户凭据 - 域\用户和纯文本密码。客户端应用程序通过调用 LogonUser (dwLogonType:LOGON32_LOGON_NETWORK) win32 API 获取该用户的 windowsidentity 对象。我使用 windowsidentity 来模拟和进行 WCF 服务调用(托管在不同的机器上)。WCF 服务配置为使用具有 Windows 集成安全性的 TCP 协议。调用失败并出现 SecurityNegotiation 异常并出现错误:远程服务器不满足相互身份验证要求。

我在这里的假设是服务器看到它拒绝的匿名客户端身份,因为端点配置为使用 Windows 集成身份验证。我的猜测是需要为 Windows 委派设置服务器帐户。我的猜测正确吗?

还,

  1. 我选择的 dwLogonType = LOGON32_LOGON_NETWORK 是否正确?
  2. LogOnUser (dwLogonType = LOGON32_LOGON_NETWORK) 返回的令牌能否用于进行远程 WCF 调用?
4

1 回答 1

1

冒充者如果想以用户的身份访问网络资源,就应该有委托权。在提到的场景中,客户端帐户(客户端正在运行)应该具有委托权限,因为它正在模拟某个用户并希望将用户身份传播到远程 WCF 服务。

我选择的 dwLogonType = LOGON32_LOGON_NETWORK 是否正确?

不。

LogOnUser (dwLogonType = LOGON32_LOGON_NETWORK) 返回的令牌能否用于进行远程 WCF 调用?

使用 dwLogonType = LOGON32_LOGON_NETWORK 选项,LogonUser 返回一个不能用于将用户身份传播到网络资源的令牌。

带有 LogonUser 的选项 dwLogonType = LOGON32_LOGON_NETWORK_CLEARTEXT 解决了这个问题。使用该选项,LogonUser 生成了一个能够以用户身份访问网络资源的令牌。

我将我的解决方案完全归功于 arx。只有他的评论我才能解决问题。

于 2012-02-06T10:45:30.440 回答