Momentan sunteți offline, așteptați să vă reconectați la internet

Datele de parolă în ICredentials nu poate fi trecut de la un client WCF la serviciul WCF în .NET Framework 4.5

IMPORTANT: Acest articol este tradus cu ajutorul software-ului Microsoft de traducere automată și poate fi corectat prin intermediul tehnologiei Community Translation Framework (CTF). Microsoft oferă articole traduse automat, post-editate de comunitate și articole traduse de oameni, pentru a permite accesul la toate articolele din Baza noastră de cunoștințe în mai multe limbi. Articolele traduse automat și post-editate pot conține greșeli de vocabular, sintaxă și/sau gramatică. Microsoft nu este responsabil de inexactitățile, erorile sau daunele cauzate de traducerea greșită a conținutului sau de utilizarea acestuia de către clienți. Găsiți mai multe informații despre traducerea în colaborare la http://support.microsoft.com/gp/machine-translation-corrections/ro.

Faceți clic aici pentru a vizualiza versiunea în limba engleză a acestui articol: 3082119
Simptome
Într-un client Windows Communication Foundation (WCF), creați o nouă interfață ICredentials din clasaNetworkCredential utilizând nume de sign-in de utilizator și parola specificate. Apoi, se face un apel sosit către o metodă de contract WCF care durează ICredentials ca argument. Găsiţi că, după ce vă exprimate ICredentials care sunt primite în serviciul WCF înapoi la o rețea de acreditări, proprietatea parola ține un șir vid. Cu toate acestea, proprietatea de nume de utilizatoreste încă deţine o valoare validă, corect.
Cauză
Aceasta este o problemă cunoscută care a fost introdus în Microsoft .NET Framework 4.0 atunci când o proprietate nouă, SecurePassword, a fost adăugat la clasa NetworkCredential. Această proprietate suprascrie șirul inițial parola când proprietatea SecurePassword este deserializat pe partea de service. Proprietatea SecurePasswordeste de tip SecureString. Prin proiectare, nu este publicată si trimise. Cu toate acestea, suprascrie șirul inițial parola utilizând o valoare goală. Acest comportament este, de asemenea, proiectat.
Rezoluţie
Pentru a remedia această problemă, trebuie să treacă informațiile de utilizator şi parola pentru serviciul independent de acreditări de rețea. Puteți face acest lucru prin crearea unui obiect definite de aplicație să țineți acreditările și să transmită acreditările pentru o metodă nouă WCF service care acceptă obiectul ca argument metodă. Deoarece acest obiect definite de aplicație conține informații sensibile, mediculnostru datele fi trimis printr-o conexiune criptată la serviciul WCF utilizând fie https de transport de securitate sau mesaj TLS.
Informaţii suplimentare
Followingexample Arată un serviciu WCF care reproduce problema. Serviciul WCF are contract următoarele:

[ServiceContract]
[ServiceKnownType(typeof(NetworkCredential))]
interfaţa publică IService
{

[OperationContract]
șir GetData(ICredentials value);
}

Un client este folosind serviciul după cum urmează:

iCredService.ServiceClient svcClient = nou iCredService.ServiceClient();
ICredentials iCred = System.Net.NetworkCredential noi ("ABC", "1234");
șir rezultatul = rezultatul = svcClient.GetData(iCred);

Utilizarea Visual Studio și setarea o întrerupere de la serviciul de valoarea. Parola va fi goală. Când examinați Microsoft Visual Studio localnici windows, vedeți următorul text:

-value{System.Net.NetworkCredential}System.Net.ICredentials {System.Net.NetworkCredential}
-[System.Net.NetworkCredential]{System.Net.NetworkCredential}System.Net.NetworkCredential
Domeniu""șir
Parolă""șir
+SecurePassword{System.Security.SecureString}System.Security.SecureString
Șir de "ABC" nume de sign-in de utilizator
ICredentials NetworkCredential SecurePassword WCF

Avertisment: acest articol a fost tradus automat

Proprietăți

ID articol: 3082119 - Ultima examinare: 08/28/2015 19:18:00 - Revizie: 1.0

Microsoft .NET Framework 4.0, Microsoft .NET Framework 4.5, Windows Communication Foundation 4, Windows Communication Foundation 4.5

  • kbmt KB3082119 KbMtro
Feedback
lementsByTagName("head")[0].appendChild(m);