2009-06-04 12 views
25

Windows kimlik doğrulamasıyla BasicHttpBinding kullanarak bir WCF hizmetim var. Çoğu istemci etki alanı hesabıdır ve varsayılan kimlik bilgilerini kullanarak servise bağlanır.WCF istemci yapılandırma dosyasında Windows kimlik bilgileri nasıl belirtilir

Şimdi yerel bir hesap altında çalışan bir ASP.NET istemcisinden servise bağlanmak istiyorum. ASP.NET uygulamasında kullanılabilen windows kimlik bilgilerini (etki alanı \ kullanıcı ve parola) kullanarak WCF hizmetine bağlanmak istiyorum.

Bunu, ClientBase < T> .ClientCredentials kullanarak kodda yapabilirim.

İstemcinin web.config dosyasında kimlik bilgilerini (etki alanı \ kullanıcı ve parola) belirtmenin bir yolu var, bu yüzden kodu değiştirmek zorunda kalmam.

DÜZENLEME

o yapılandırma dosyasında yapılamaz ise, WCF hizmeti için bir kimlik olarak System.Net.ICredentials veya System.Net.NetworkCredential kullanmanın bir yolu var mı?

.NET Framework, ağ kimlik bilgilerini sağlamak için homojen bir yol olarak bunları sağlar, ancak WCF ile ilgisiz System.ServiceModel.Description.ClientCredentials sınıfını temel alan yeni bir uyumsuz sistem lehine atılmış gibi görünüyor.

DÜZENLEME 2

asıl soruya Marc'ın cevabını kabul etmek - istemci yapılandırma dosyası :(

Ben WCF bir eksiklik olarak görecekti bunu yapmanın bir yolu yoktur görünüyor - Microsoft'un yapılandırma dosyasında kimlik bilgilerini koymamızı engellemesini kabul etmiyorum - hepsi bir yerde saklanmak zorunda olduktan sonra, ve Çerçeve yapılandırma dosyasını şifrelemek için gereken olanakları içeriyor. Bunun için özel bir BehaviorExtensionElement oluşturabilirim sanırım Ancak, kutudan çıkmış olması gerekir

Ayrıca biraz tutarsız: system.net/mailSettings/smtp/network yapılandırma öğesi kimlik bilgilerinin belirtilmesine izin veriyor, bu yüzden neden WCF değil? System.Net.NetworkCredential kullanma konusunda ikinci soru ile ilgili olarak

, bunun en azından aşağıdaki kodla Windows kimlik doğrulaması kullanılırken, mümkün this blog dan görünüyor:

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

cevap

11

Sen belirleyemezsiniz senin config dosyasındaki kimlik bilgileri, maalesef - bunu kodda yapmanız gerekir (büyük olasılıkla yapılandırma dosyasında kimlik bilgilerinizle düz metin halinde olabilir, iyi bir şey değil).

+3

eklemek "... senin yapılandırma dosyasında, düz metin olarak" genel olarak iyi bir şey değil, ama şifreli yapılandırma dosyasında sorun yok. – Joe

+0

@marc_s Konfigürasyon dosyası aracılığıyla ayarlanamıyor mu? –

+1

@Johnny_D: hayır, bildiğim kadarıyla değil. –

0

Bunu denediniz mi?

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

Hayır, bu gerçekten yardımcı olmuyor - ASP.NET sunucusu temsilci için güvenilir değil. Çalışacak – Joe

4

Ben < bağlayıcı > etiketleri içinde kimlik bilgilerini belirtmek için bir mekanizma olmadığını anlamak ama neden bunu:

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

- ama bu durumda config dosyanızı şifrelemenizi şiddetle tavsiye ediyorum! –

+0

Evet Kodda yapabileceğimi biliyorum, kodu değiştirmekten kaçınmak istiyorum. – Joe

+0

Joe - benim örneğim, daha sonra yerel olarak yapamadığınız için kullanıcı adınızı ve şifrenizi app/web.config dosyasında belirtmenizi sağlayacaktır. – Lewis

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

yanlıştır.Bu ileti güvenliği ve = "KullanıcıAdı"ClientCredentialType birlikte kullanılır. Sen O microsoft orada olacağını varsayılan bağlayıcı yapılandırmasında kimliği ve parola ayarlamak için hiçbir şekilde (Hâlâ arıyorum), Bence bu kod feryat ekleme yaptım ama yine dilek görünüyor

Svc.ClientCredentials.Windows.ClientCredential = new NetworkCredential(...); 
+0

Tüm gönderiminizi ben yapmadım. Sorunun cevabını zaten biliyorsunuz - üzgünüm. – Steven

+0

Bu çok eski bir soru olsa da, bunu aynı sorun yaşayan herkes için gönderiyorum. – Steven

+7

Ayrıca, tam bir cümlenin olmadı;) – Gagege

1
Svc.ClientCredentials.Windows.ClientCredential = 
    System.Net.CredentialCache.DefaultNetworkCredentials; 
5

kullanmalıdır varsayılan bağlamaları

<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; 

Sebastian Castaldi