2013-03-13 71 views
2

我有一個運行的WCF服務,託管在IIS7上,該服務使用netTcp端點進行公開,並使用Windows身份驗證(Transport安全性和clientCredentialType="Windows")進行配置,並且這一切都正常。通過WCF服務傳遞NetworkCredential以與EWS API一起使用

在服務中,我使用EWS API發送電子郵件,並在Exchange服務器上檢查收件箱。我有這個工作的一部分,目前在發展中,我已通過創建一個NetworkCredential對象通過手動指定憑證屬性。

我想要做的事情是使用用戶的身份該服務,以便我可以發送郵件,並通過他們的收件箱迭代。

我可以用

ServiceSecurityContext.Current.PrimaryIdentity 

可以訪問調用用戶的細節,但這個返回IIdentity對象,而不是我需要創建到Exchange服務器的連接的憑據。

我不能明確地創建一個沒有密碼的NetworkCredential對象,我沒有,並且從我所看到的我無法從IIdentity對象創建一個NetworkCredential對象。

必須有一種方法來實現這一點。所有的建議歡迎。

回答

3

什麼

using(ServiceSecurityContext.Current.WindowsIdentity.Impersonate()) 
{ 
    ExchangeService service = new ExchangeService(...) 
    service.UseDefaultCredentials = true; 

} 

客戶端,調用您的服務器必須允許代表團:

proxy.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation; 

如果您的WCF服務器運行使用本地系統或網絡服務帳戶,您還需要啓用「可信的委派「屬性,用於AD中的計算機帳戶(通常是網絡管理員的工作)。如果它使用另一個域用戶帳戶運行,則需要爲該帳戶啓用「可信委派」屬性併爲您的服務器創建服務器主體名稱(SPN)。老實說,我從來沒有這樣做,因爲我更喜歡使用NetworkService帳戶。她來了幾個環節:Herehereand here

+0

偉大的想法,我很樂觀,但是拋出異常:'爲「Microsoft.Exchange.WebServices.Data.ExchangeServiceBase」的類型初始值拋出exception.' – 2013-03-13 17:04:13

+0

什麼樣的例外?也許你需要配置委派才能使其工作? – Slava 2013-03-13 17:08:04

+0

如果您的遠程客戶端連接到您的服務器,並且您的服務器調用Exchange服務器(在遠程計算機上),則需要爲您的服務器配置代理。 – Slava 2013-03-13 17:09:53

相關問題