2012-07-05 35 views
5

Có một phiên bản Dynamic CRM trên máy chủ ("tại chỗ"). Nó sẽ được sử dụng bởi một vài trang web chạy trên các máy ở xa (miền khác, một Thư mục Họat động khác). Giao tiếp giữa các trang web đó và cá thể CRM được thực hiện thông qua proxy CRM, dịch vụ WCF ở gần (gần CRM), xử lý yêu cầu, truy vấn CRM, v.v.WCF: Dịch vụ xác thực hoặc bảo mật dựa trên mã thông báo?

Dịch vụ WCF đó đang đối mặt với Internet. Mặc dù các kênh giao tiếp bảo mật không phải là cần thiết, nhưng xác thực là. Chúng tôi không thể cho phép khách hàng ngẫu nhiên sử dụng các dịch vụ được cung cấp bởi proxy CRM.

Vì vậy, dịch vụ xác thực (cookie?)/Mã thông báo mã hóa bằng tay (dưới dạng tham số cho từng hoạt động dịch vụ)/this solution - on stackoverflow.

Cảm ơn bạn trước!

PS: mã thông báo được mã hóa bằng tay sẽ "nhạy cảm về thời gian" và được băm một vài lần bằng một số khóa bí mật. Man-in-the-middle có thể không phải là một vấn đề lớn như vậy, vì một mã thông báo có thể bị vô hiệu sau một yêu cầu.

Trả lời

8

Mã thông báo mã hóa bằng tay không phải là rất thanh lịch. Nó gây ô nhiễm chữ ký phương thức của bạn và làm cho bạn trùng lặp kiểm tra tất cả các nơi.

Nếu bạn có thể phân phối thông tin đăng nhập cho khách hàng dịch vụ hoặc chuyển thông tin đăng nhập mà họ đã sử dụng cho hệ thống của bạn, tôi khuyên bạn nên sử dụng bảo mật thư với tên người dùng tùy chỉnh & trình xác thực mật khẩu.

Các bước để triển khai are simple enough. Bạn chỉ cần thực hiện một UserNamePasswordValidator:

Một bản tóm tắt cấu hình ngắn từ bài viết liên quan:

Xác định chế độ bảo mật trong ràng buộc của bạn:

<security mode="Message"> 
    <message clientCredentialType="UserName"/> 
</security> 

Trong hành vi dịch vụ của bạn thêm:

<serviceCredentials> 
    <userNameAuthentication 
     userNamePasswordValidationMode="Custom" 
     customUserNamePasswordValidatorType="YourFullUserNameValidatorType"/> 
</serviceCredentials> 

Sau đó, khách hàng chỉ cần đặt thông tin xác thực của họ trực tiếp trên proxy dịch vụ. Vì vậy, chúng không được thông qua trong các hoạt động dịch vụ.

serviceClient.ClientCredentials.UserName.UserName = "username"; 
serviceClient.ClientCredentials.UserName.Password = "password"; 

bạn UserNamePasswordValidator sẽ có được những chứng chỉ cho mỗi cuộc gọi hoạt động dịch vụ và bạn sẽ có cơ hội để xác nhận họ chống lại cửa hàng thông tin của bạn.

Tuy nhiên, để bảo mật hơn, bạn có thể xem xét certificate authentication. Nó đáng tin cậy hơn và bạn không bắt buộc phải mua chứng chỉ từ CA. Nếu bạn cũng có thể thiết lập chính mình như một CA trên máy tính khách hàng, sau đó tốt của bạn để đi. Nó phù hợp đặc biệt bởi vì bạn chỉ có một vài khách hàng, vì vậy họ sẽ dễ dàng quản lý.

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