Dữ liệu mật khẩu trong ICredentials không được chuyển từ máy tính khách WCF bản ghi dịch vụ WCF trong Khuôn khổ .NET 4.5

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch thuật của Microsoft và có thể được Cộng đồng Microsoft chỉnh sửa lại thông qua công nghệ CTF thay vì một biên dịch viên chuyên nghiệp. Microsoft cung cấp các bài viết được cả biên dịch viên và phần mềm dịch thuật thực hiện và cộng đồng chỉnh sửa lại để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng nhiều ngôn ngữ Tuy nhiên, bài viết do máy dịch hoặc thậm chí cộng đồng chỉnh sửa sau không phải lúc nào cũng hoàn hảo. Các bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này: 3082119
Triệu chứng
Trong máy tính khách Windows Communication Foundation (WCF), bạn tạo một giao diện ICredentials mới lớpNetworkCredential bằng cách sử dụng tên người dùng và mật khẩu được chỉ định. Sau đó, bạn thực hiện cuộc gọi tới một phương pháp đồng WCF mất ICredentials làm đối số. Bạn thấy rằng sau khi bạn xem xét ICredentials nhận được bản ghi dịch vụ WCF về ủy nhiệm mạng, thuộc tính mật khẩu có một chuỗi trống. Tuy nhiên, thuộc tính người dùngvẫn giữ giá trị hợp lệ, chính xác.
Nguyên nhân
Đây là vấn đề đã được giới thiệu trong Microsoft Khuôn khổ .NET 4.0 khi máy tính mới, SecurePassword, đã được loại NetworkCredential. Thuộc tính này sẽ ghi đè chuỗi mật khẩu ban đầu khi nhà SecurePassword deserialized bên bản ghi dịch vụ. Thuộc tính SecurePasswordlà loại SecureString. Thiết kế, nó không đăng và gửi. Tuy nhiên, nó sẽ ghi đè chuỗi mật khẩu ban đầu bằng cách sử dụng một giá trị trống. Hiện tượng này cũng thiết kế.
Giải pháp
Để khắc phục sự cố này, bạn phải chuyển thông tin tên người dùng và mật khẩu cho các bản ghi dịch vụ độc lập với ủy nhiệm mạng. Bạn có thể thực hiện việc này bằng cách tạo một đối tượng xác định ứng dụng giữ uỷ nhiệm và chuyển các thông tin cho một phương pháp bản ghi dịch vụ WCF mới chấp nhận các đối tượng như một đối số phương pháp. Do ứng dụng xác định đối tượng này chứa thông tin nhạy cảm, werecommend dữ liệu được gửi qua kết nối được mã hoá bản ghi dịch vụ WCF bằng cách sử dụng https hoặc truyền bảo mật hoặc thông báo lớp bảo mật.
Thông tin thêm
Followingexample cho thấy bản ghi dịch vụ WCF tái tạo sự cố. bản ghi dịch vụ WCF có hợp đồng sau:

[ServiceContract]
[ServiceKnownType(typeof(NetworkCredential))]
khu vực giao diện IService
{

[OperationContract]
Chuỗi GetData(ICredentials value);
}

Khách hàng đang sử dụng bản ghi dịch vụ như sau:

iCredService.ServiceClient svcClient = mới iCredService.ServiceClient();
ICredentials iCred = mới System.Net.NetworkCredential ("ABC", "1234");
Chuỗi kết quả = kết quả = svcClient.GetData(iCred);

Sử dụng Visual Studio và thiết lập một điểm dừng bản ghi dịch vụ giá trị. Mật khẩu sẽ trống. Khi bạn kiểm tra windows địa phương của Microsoft Visual Studio, bạn thấy văn bản sau:

-value{System.Net.NetworkCredential}System.Net.ICredentials {System.Net.NetworkCredential}
-[System.Net.NetworkCredential]{System.Net.NetworkCredential}System.Net.NetworkCredential
Tên miền""Chuỗi
Mật khẩu""Chuỗi
+SecurePassword{System.Security.SecureString}System.Security.SecureString
tên người dùng "ABC" Chuỗi
ICredentials NetworkCredential SecurePassword WCF

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 3082119 - Xem lại Lần cuối: 08/30/2015 02:13:00 - Bản sửa đổi: 1.0

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

  • kbmt KB3082119 KbMtvi
Phản hồi