2015-11-05 29 views
0

上我有以下設置:WCF Kerberos委派到服務在同一臺機器

Client -> MiddleWS (ISS-hosted WCF) -> DestWS1 and DestWS2 (Self-hosted WCF services) 

所有的機器上使用Active Directory一個內聯網運行。我需要能夠將來自客戶端的憑證傳播到DestWS1和DestWS2(這兩個憑據在同一臺服務器上的自託管環境中運行,但具有不同的地址)。如果我從客戶端向MiddleWS發出一個請求,然後向DestWS1或者DestWS2發出請求,一切正常。但是,如果我想從MiddleWS向DestWS1和DestWS2發出兩個後續請求,則第二個請求不會成功(提供權限問題)。

DestWS1和DestWS2必須具有不同的地址(f.x.,http://server/DestWS1.svchttp://server/DestWS2.svc)。我有兩個從他們的WSDL生成的WCF客戶端。看起來好像我創建了兩個客戶端(因此有兩個通道),第二個失敗(kerberos令牌發生了一些事情)。如果我只使用一個客戶端,但從它向同一服務進行兩個調用,則這兩個請求都可以正常工作。一旦我關閉了頻道,令牌就不能再傳輸了,看起來像。

任何有類似問題的人?

+0

你有沒有配置適當的SPN和AD的代表團?什麼是錯誤? –

+0

是的,在中間服務器上啓用委派並且有SPN。使用網絡監視器看起來很好(即與DC通信時沒有錯誤)。 我得到的錯誤是用戶沒有權限。從這個錯誤我可以看到用戶是我的機器(MiddleWSServer $),而不是我的AD用戶。 –

回答

0

顯然這個問題是由於異步通信造成的。當同時調用兩個服務時,身份驗證將丟失。有兩個可能的解決方案: - 切換到同步請求 - 改變alwaysFlowImpersonationPolicy爲true在配置(我還沒有嘗試過,但很多人指出它作爲解決方案):)

相關問題