2011-01-27 23 views
9

Kịch bản của tôi là ứng dụng 3 tầng trong đó tầng dữ liệu là cơ sở dữ liệu SQL Server, tầng giữa là ứng dụng WCF được lưu trữ trong Dịch vụ Windows và cuối cùng là bản trình bày là ứng dụng Asp.Net MVC .WCF/ASP.NET Authentication

Như thường lệ, tầng giữa là lớp thực hiện tất cả logic nghiệp vụ. Truy cập cơ sở dữ liệu, xác định quy tắc kinh doanh .. v.v.

Được rồi, cho đến nay rất tốt! NHƯNG bây giờ đây là câu hỏi: Làm thế nào để bạn xử lý bảo mật trong một kịch bản như vậy? Ý tôi là, người dùng phải đăng nhập vào ứng dụng ASP.NET, nhưng tôi muốn xác thực nó không chỉ trong ASP mà còn ở tầng giữa WCF nữa, vì một dịch vụ WCF được cho là được truy cập bởi nhiều ứng dụng hơn.

Tôi muốn người dùng đăng nhập vào ứng dụng Asp.Net và để WCF cũng biết thông tin đăng nhập. Có một số loại phiên trong WCF, trong đó để xác định một người dùng đăng nhập?

Các chuyên gia xử lý bảo mật trong trường hợp này như thế nào? Tôi biết bạn có thể bảo vệ các dịch vụ WCF với bảo mật tin nhắn, nhưng làm thế nào để đồng bộ hóa Asp.Net và WCF trên một người dùng đăng nhập duy nhất? Tôi muốn bảo vệ các hoạt động WCF tùy thuộc vào người sử dụng cho các phương tiện ủy quyền.

+0

Đây là một câu hỏi quá lớn để xử lý trên SO - nó chiếm 50 trang trong bộ đào tạo WCF. Đề xuất bạn bắt đầu với một số nghiên cứu và sau đó đăng bất kỳ câu hỏi cụ thể nào bạn có - http://mscerts.net/programming/user-level%20security%20%20%20authorization%20and%20impersonation%20%28part%201%29%20 -% 20authorization.aspx –

+0

Ứng dụng N-Tier? N là gì? 2? 3? 20? –

+0

Điều này được diễn đạt theo cách tổng quát mơ hồ nhưng câu hỏi vẫn hợp lệ. Tôi muốn người dùng xác thực bởi ASP.NET được truyền chuỗi cho dịch vụ WCF như người dùng đã đăng nhập. Sao chuyện đó lại khó khăn đến thế? – DaveN59

Trả lời

2

tôi sẽ đề nghị xem xét việc sử dụng một cách tiếp cận như HMAC (Hash Message Authentication Code) đối với an ninh của bạn, hoặc một cách tiếp cận dấu hiệu dựa trên tương tự. Ý tưởng sẽ là ký các yêu cầu của bạn vào lớp WCF có thể được sử dụng để xác thực yêu cầu và xác định người dùng đưa ra yêu cầu.

Các yếu tố thiết yếu sẽ là mã thông báo và bí mật được chia sẻ của một số loại được sử dụng để ký từng yêu cầu. Mã thông báo sẽ cho phép bạn xác định người dùng trên đầu WCF và tra cứu bí mật được chia sẻ để xác minh yêu cầu. Bạn cũng có thể thêm dấu thời gian/nonces để ngăn chặn các cuộc tấn công phát lại và như vậy.

Tôi đã sử dụng phương pháp này cho một số dịch vụ REST được xây dựng trên WCF - với lợi ích bổ sung mà khách hàng không cần lưu trữ tên người dùng và mật khẩu, chỉ cần mã bảo mật được sử dụng để liên lạc. Trong trường hợp của bạn, bạn sẽ cần phải phân loại cách trao đổi các thẻ giữa lớp ASP.NET và lớp WCF, nhưng nó sẽ cung cấp cho bạn một phương thức xác thực hợp nhất cho bất kỳ người tiêu dùng nào của các dịch vụ WCF của bạn.

Các vấn đề liên quan