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的解決方案。只有他的評論我才能解決這個問題。