0

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

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

此外,

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

'LOGON32_LOGON_NETWORK'不允许访问其他服务器。 'LOGON32_LOGON_NETWORK_CLEARTEXT'。 – arx 2012-02-05 18:32:20

回答

1

假冒者如果想要以用户身份访问网络资源,就应该有授权。在上述场景中,客户端帐户(客户端运行时)应具有委派权限,因为它正在冒充某个用户,并且希望将用户身份传播给远程WCF服务。

Is my choice of dwLogonType = LOGON32_LOGON_NETWORK correct?

Can the token returned by LogOnUser (dwLogonType = LOGON32_LOGON_NETWORK) be used for making remote WCF calls?

随着dwLogonType = LOGON32_LOGON_NETWORK选项,LogonUser的返回不能用于propogating用户身份对网络资源的令牌。

使用LogonUser选项dwLogonType = LOGON32_LOGON_NETWORK_CLEARTEXT可以解决问题。使用该选项,LogonUser生成一个令牌,可以在用户身份下访问网络资源。

我完全赞同arx的解决方案。只有他的评论我才能解决这个问题。