【问题标题】:Does this require windows delegation to be enabled for server service account?这是否需要为服务器服务帐户启用 Windows 委派?
【发布时间】:2012-02-27 07:13:01
【问题描述】:

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

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

还有,

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

【问题讨论】:

  • LOGON32_LOGON_NETWORK 不允许访问其他服务器。 LOGON32_LOGON_NETWORK_CLEARTEXT 会。

标签: wcf windows-authentication impersonation windows-security


【解决方案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。只有他的评论我才能解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    相关资源
    最近更新 更多