2013-03-18 33 views
2

我見過很多關於WCF模擬雙跳問題的文章,但他們都沒有專門幫助我解決我的問題。WCF雙跳本地主機丟失第二跳假冒

我錯過了什麼?我還需要做什麼才能保留我的模擬用戶(DOMAIN \ UserName)在服務2上?我正在查看ServiceSecurityContext.Current.WindowsIdentity.Name來確認 - 也許這是錯誤的。

的設置:

  1. 客戶端應用託管在本地主機與服務參考IIS到服務1 - 冒充的WindowsIdentity(域\用戶名)
  2. 服務1 - WCF服務託管在本地主機IIS與服務引用到服務2
  3. 服務2 - WCF服務託管在本地主機IIS

我使用ALL basicHttpBindings讓事情變得簡單。我已經在兩個服務端點上設置了SPN。

  • 我可以成功地使雙跳和代碼執行就好
  • 在服務1(跳1)我的ServiceSecurityContext.Current.WindowsIdentity是我假冒的人(域\用戶名)
  • 在服務2(跳2),我ServiceSecurityContext.Current.WindowsIdentity是IIS應用程序池用戶
  • ImpersonationLevel = 「委派」
  • 兩個WCF服務的Windows認證功能和匿名殘疾人

**注意:我在我的開發箱上全部在本地運行。即便如此,我的代表團級別也允許我自己的代表團參加。也許矯枉過正。

綁定(兩種服務類似):

<binding name="..."> 
    <security mode="TransportCredentialOnly"> 
     <transport clientCredentialType="Windows" /> 
    </security> 
</binding> 

我已經設置impersonationLevel =「委派」 WCF服務客戶端和服務端點行爲的配置上都。我的服務方法特別用impersonationOption =「Allowed」(跳1)和impersonationOption「必需」(跳2)裝飾。

+0

是否可以顯示與您如何設置模擬相關的代碼或配置? – EdmundYeung99 2013-03-19 00:31:04

+0

嗨埃德蒙。我已經添加了基本的綁定配置。具體來說,你還有什麼興趣看到? – chrisriesgo 2013-03-19 00:46:46

+0

你在哪裏配置你的模擬級別? – EdmundYeung99 2013-03-19 03:43:07

回答

1

事實證明,在我的情況是確保以下行爲屬性的關鍵部分被設置:

<serviceAuthorization impersonateCallerForAllOperations="true" /> 

以前,當我設置這個值,我收到了實體框架中的錯誤,所以我解開了那個設定。看起來,沿着將我的設置與標準實現(如其他varios文章中所述)對齊的路線,我終於可以設置此屬性並使其按預期工作。

編輯: 如果這一切在本地工作,但不能在分佈式環境中工作,看看這篇文章:How can I fix the Kerberos double-hop issue?。您可能需要將機器設置爲彼此信任委派。

+1

添加到服務1或服務2的內容是什麼? – 2013-09-11 20:10:54

+0

服務2和1在我的情況。請參閱我的其他答案。你可能會發現第二個問題。 – chrisriesgo 2013-09-12 00:18:47