2013-02-18 70 views
28

我在Web應用程序內調用Web服務時遇到了一些麻煩,我希望這裏有人能夠提供幫助。據我所知,這個似乎與Kerberos double-hop issue有關。但是,如果是這樣,我不知道該如何解決問題。爲了讓事情變得更加困難,我沒有適當的權限對Active Directory帳戶進行更改,所以我需要知道請求更改時要求的內容。在我的情況下,我需要將憑據(集成Windows身份驗證)從Web應用程序傳遞到後端Web服務,以便Web服務在適當的用戶上下文中運行。如何解決Kerberos雙跳問題?

這裏是我的確切問題:

這工作

Working scenario

這不起作用

Non-working scenario

工作場景和非工作場景之間的區別在於,工作場景在localhost上運行應用程序(無論是開發人員的PC還是服務器上的問題),而非工作示例正在另一臺機器上運行。兩種方案之間的代碼完全相同。

我已經試過

  1. 添加一個SPN的域帳戶運行的每個服務器setspn -a http/server1 DOMAIN\account
  2. 模擬的不同方法
  3. 卸下模擬代碼using(...)和執行應用程序池作爲應用程序池帳戶的Web服務調用。這按預期工作。

有沒有人有任何想法,我可以做些什麼來解決這個問題?

+3

酷圖讓問題變得如此容易理解 - 謝謝! – 2015-07-05 09:33:16

回答

12

中間服務器必須被信任作爲委派。否則,將不會委派任何憑證,並且中間服務器不能模擬原始客戶端。

+1

這最終成爲我在上述環境中的解決方案。但是,在使用NLB之後,我們在生產環境中遇到了(並且仍然遇到)同樣的問題。我現在正在解決這個問題,但需要建立一個模擬我們的生產環境的測試環境,以查明確切的原因。你有什麼機會知道在這種情況下做什麼?將SPN添加到運行具有集羣名稱和FQDN的所有服務的域帳戶最終會破壞所有身份驗證。 – 2013-02-20 19:41:07

+0

您無法將SPN映射到多個帳戶。所有的SPN必須在全森林範圍內有區別。由於您位於負載均衡器的後面,因此您可以嘗試以下操作: 1.將DNS轉發到NLB域,將DNS反向轉發到實際的服務器。 2.將NLB與DNS循環法結合使用。這是可以肯定的。 – 2013-02-20 21:14:37

+0

也許我錯誤地解釋了一些事情,因爲我對問題空間知之甚少。我最初嘗試做的事(打破了一切)是運行以下命令: setspn -A http/servername DOMAIN \ webaccount setspn -A http/servername.FQDN DOMAIN \ webaccount – 2013-02-25 15:04:57