2009-06-04 40 views
25

我有一個使用BasicHttpBinding和Windows身份驗證的WCF服務。 大多數客戶端都是域帳戶,並使用其默認憑證連接到該服務。如何在WCF客戶端配置文件中指定Windows憑據

現在我想連接到本地帳戶下運行的ASP.NET客戶端的服務。我想使用ASP.NET應用程序可用的Windows憑據(域\用戶名和密碼)連接到WCF服務。

我知道我可以在代碼中使用ClientBase < T> .ClientCredentials來做到這一點。

有沒有辦法在客戶端的web.config文件中指定憑證(域\用戶和密碼),所以我不必更改代碼?

編輯

如果它不能在配置文件中進行,有沒有使用System.Net.ICredentials或System.Net.NetworkCredential作爲一個WCF服務憑證的方式嗎?

.NET框架提供了這些提供網絡憑證的同源方式,但對於WCF,似乎已經拋棄了基於不相關的System.ServiceModel.Description.ClientCredentials類的新的不兼容系統。

EDIT 2

接受馬克的回答原來的問題 - 這似乎是沒有辦法的客戶端配置文件:(

我會認爲這是在WCF缺乏在這樣做 - 我不認爲微軟應該故意阻止我們把證書放在配置文件中 - 畢竟他們必須存儲在某個地方,並且Framework包含了用於加密配置文件的工具。我想我可以爲此創建一個自定義的BehaviorExtensionElement ,但它應該是開箱即用的。

這也有點不一致:system.net/mailSettings/smtp/network配置元素允許指定憑據,那麼爲什麼不使用WCF呢?

關於如何使用System.Net.NetworkCredential第二個問題,從this blog,這是可能的,使用至少在Windows身份驗證,用下面的代碼看起來:

factory.Credentials.Windows.ClientCredential = 
    new System.Net.NetworkCredential(name, password, domain); 

回答

11

你不能指定不幸的是,你必須在代碼中做到這一點(很可能是因爲否則,你可能會在配置文件中以純文本形式結束憑據 - 這不是一件好事情......)。

+3

「......在你的配置文件,以純文本」是不是一般的好東西,但在加密的配置文件就可以了。 – Joe 2009-06-04 17:02:28

+0

@marc_s它是否仍然無法通過配置文件進行設置? – 2013-02-28 11:31:08

+1

@Johnny_D:不會,據我所知。 – 2013-02-28 12:39:23

0

你試過嗎?

<system.web> 
     <identity impersonate="true" userName="username" password="password"/> 
</system.web> 
+2

不,這沒有真正的幫助 - ASP.NET服務器不受信任委派。 – Joe 2009-06-04 17:01:28

4

據我所知,沒有指定<結合>標籤內的憑據的機制,但爲什麼不能做到這一點:

Svc.ClientCredentials.UserName.UserName = AppSettings["WCFSvcUsername"]; 
Svc.ClientCredentials.UserName.Password = AppSettings["WCFSvcPassword"]; 
18
Svc.ClientCredentials.UserName.UserName = AppSettings["WCFSvcUsername"]; 
Svc.ClientCredentials.UserName.Password = AppSettings["WCFSvcPassword"]; 

不正確。它與消息安全性一起使用clientCredentialType =「UserName」。您應該使用

Svc.ClientCredentials.Windows.ClientCredential = new NetworkCredential(...); 
1
Svc.ClientCredentials.Windows.ClientCredential = 
    System.Net.CredentialCache.DefaultNetworkCredentials; 
5

看來是沒有辦法設置在默認綁定配置ID和密碼(我還在尋找),我做到了添加代碼波紋管,但仍然希望微軟會它添加到默認綁定

<appSettings> 
    <add key="user" value="user" /> 
    <add key="password" value="password" /> 
    <add key="domain" value="domain" /> 
    </appSettings> 


    // client side code 
    string userName = ConfigurationManager.AppSettings.Get("user"); 
    string pswd = ConfigurationManager.AppSettings.Get("password"); 
    string domain = ConfigurationManager.AppSettings.Get("domain"); 

    client.ClientCredentials.Windows.ClientCredential.Domain = domain; 
    client.ClientCredentials.Windows.ClientCredential.UserName = userName; 
    client.ClientCredentials.Windows.ClientCredential.Password = pswd; 

塞巴斯蒂安Castaldi

相關問題