Tôi đang làm việc trên một dự án mà tôi cần những điều sau đây.Tên người dùng WCF không có giấy chứng nhận
- dịch vụ WCF trên phía máy chủ (.NET 3.5)
- WPF client cho các mặt hàng khác (NET 3,0)
Tôi có một ứng dụng hiện tại mà tôi phải sử dụng xác thực và ủy quyền từ (ở phía máy chủ). Tôi cũng cần lưu trữ một số siêu dữ liệu về người dùng trong Chủ đề chính của Dịch vụ WCF (một đối tượng trang web). Tôi làm điều này để tôi có thể nhận được nó trong dịch vụ WCF nếu tôi hoàn toàn phải; một số logic kinh doanh có thể yêu cầu nó. Vì vậy, kế hoạch của tôi là làm như sau ...
Tạo một ServiceAuthorizationManager tùy chỉnh cho máy chủ và trong đó tôi sẽ đăng nhập vào người dùng và nhận vai trò từ ứng dụng hiện có. Tôi sẽ cache đối tượng "Site", và khi các yêu cầu tiếp tục kéo ra từ cache. Tôi cũng sẽ cần một đối tượng CustomPrincipal để giữ dữ liệu tùy chỉnh của mình. Tôi muốn mạo danh người dùng vì vậy mà tôi có thể sử dụng vai trò xây dựng trong lọc trong WCF như thế này:
[PrincipalPermission(SecurityAction.Demand, Role = "Role1")]
public string[] RolesForUser(string username){}
Tôi đã cố gắng sử dụng ủy quyền ASP.NET với một nhà cung cấp vai trò tùy chỉnh, nhưng tôi đã không thể thiết lập bất cứ điều gì trên Hiệu trưởng hiện tại. Tôi cũng đã cố gắng sử dụng một IAuthorizationPolicy tùy chỉnh, nhưng vấn đề phát sinh. Những vấn đề này xử lý với việc có thể sử dụng ứng dụng WCFClient.exe, khi nó được phát hiện (bằng cách sử dụng mex endpoing) nó sẽ không cung cấp bất kỳ thông tin đăng nhập nào, vì vậy thông tin đăng nhập sẽ thất bại. Cuối cùng tôi đã quyết định rằng ServiceAuthorizationManager là một cách đúng đắn để đi, nhưng tôi mở cho các đề xuất khác.
Trên máy khách, tôi sẽ thu thập thông tin đăng nhập và đưa chúng vào lớp proxy WCF, như sau.
proxy.ChannelFactory.Credentials.UserName.UserName = userName;
proxy.ChannelFactory.Credentials.UserName.Password = password;
Khi tôi bắt đầu đi xuống tuyến đường này, tôi nhận thấy rằng tôi không thể nhận tên người dùng/mật khẩu trong phương thức CheckAccessCore của lớp người quản lý của tôi. Điều tra thêm cho thấy rằng tôi thực sự nên được xác thực trong một UserNamePasswordValidator tùy chỉnh. Vì vậy, tôi đã tạo ra một trong số đó. Vấn đề là phương pháp xác thực không bao giờ được gọi.
Điều tra thêm cho thấy rằng để phương thức xác thực được gọi là dịch vụ WCF của tôi phải có bảo mật mức tin nhắn hoặc vận chuyển. Vấn đề với điều đó là tôi không thể tìm ra cách để có một tin nhắn hoặc bảo mật mức vận chuyển mà không có chứng chỉ X.509. Sản phẩm này đang đi vào hàng trăm máy vô cùng bị khóa và không thể cài đặt chứng chỉ.
Có cách nào để làm những gì tôi hỏi mà không cần cài đặt chứng chỉ không?