2011-09-26 78 views
0

我的服務是一個netTCP webservice,連接到它的站點是一個windows認證的模擬網站。當我試圖打我的服務,並且服務和站點在同一臺服務器上時,那麼這個工作就是正確的。當我嘗試從我的開發機器或從我的本地機器上運行的IIS實例中啓動服務時,它可以正常工作。唯一不起作用的是當我的網站位於網站的另一臺服務器上時。看一下WCF實用程序的輸出,我們發現一個匿名用戶正在嘗試訪問我們的服務。然而,瘋狂的是我的用戶名顯示在服務的右上角。通過一個呼叫WCF的網站冒充用戶

Page.User.Identity.Name 

我想我想知道我是否正在模擬客戶端。我懷疑它是否適用於這些實例,因爲當兩個應用程序池在本地計算機上運行時都沒有必要的握手。在我的本地機器上也會出現這種情況(不知道爲什麼,但我認爲當我從登錄的計算機到服務器時可能存在某種隱含的安全性)。 這是我如何模擬用戶...

client2.ChannelFactory.Credentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation; 

我認爲我正確地有我的IIS 7級的Windows 2008安裝程序。除了爲站點啓用Windows身份驗證之外,我還爲該站點啓用了aspnet模擬。我有一切,但Windows服務的身份驗證被禁用。我將應用程序池設置爲特定的ID。我不完全確定我錯過了什麼。我還不是wcf服務的主人,所以我認爲我在這方面的知識有限。如果你們有任何想法或建議,請告訴我。

回答

0

所以看來你有下面的問題。我認爲這與機器B不相信機器A傳遞證書有關。這表現在不同的方面。

您需要從在Active Directory中的更改一個constratined通過執行以下(更here

  • 單擊開始信任的Kerberos憑據委派機A,單擊管理工具,然後單擊Active Directory用戶和電腦。
  • 展開域,然後展開「計算機」文件夾。
  • 在右窗格中,右鍵單擊Web服務器的計算機名稱,選擇「屬性」,然後單擊「委派」選項卡。
  • 單擊以選中信任此計算機委派任何服務(僅Kerberos)。
  • 單擊確定。

在我看來,問題的關鍵是,雖然機器B接受請求,但它不信任機器A傳遞信用。這是看起來經典的雙跳問題。這是典型的情況,特別是在未委派機器的SQL服務器上工作時,您將看到如下錯誤:登錄失敗,用戶'(null)'。原因:不與可信的SQL Server連接關聯。總之,SQL在這裏不是你的問題,只是作爲一個例子展示,因爲我之前曾經打過這個。我沒有及時瞭解最新的Win2k8更改,但也可以在更細化的級別上授予代表權限。 另外在虛線下面的圖片我的意思是說「機器B必須信任計算機A通過creds」

Delegation