我有一个客户端控制台应用程序,它有一些用户凭据 - 域\用户和纯文本密码。客户端应用程序通过调用LogonUser(dwLogonType:LOGON32_LOGON_NETWORK)win32 API获取该用户的windowsidentity对象。我使用windowsidentity模拟并进行WCF服务调用(托管在不同的机器上)。 WCF服务配置为使用TCP协议和Windows集成安全性。调用失败,出现SecurityNegotiation异常,错误:远程服务器不满足相互认证要求。
我的假设是服务器看到它拒绝的匿名客户端身份,因为端点配置为使用Windows集成身份验证。我的猜测是需要为Windows委托设置服务器帐户。我的猜测是否正确?
此外,
答案 0 :(得分: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的解决方案。只有他的评论才能解决问题。