2012-05-16 51 views
6

Tôi có một API mà tôi đang trưng bày qua REST và tôi đang cân nhắc về nơi để đặt các giới hạn của chính quyền.
Tôi đã đọc rằng có một phương pháp hay nhất về việc bảo vệ lớp dịch vụ vì nó là công việc và bạn không biết nó sẽ được gọi ở đâu nhưng tôi không chắc thực hành tốt nhất là gì lớp WS.
Một ý nghĩ tôi có là tôi cần phải có một mô hình phân quyền rất tốt trên lớp dịch vụ và mô hình phân quyền rất thô trên lớp WS để giảm thiểu nguyên tắc DRY một mặt nhưng vẫn có một số khái niệm về quốc phòng theo chiều sâu.Bảo mật mùa xuân đảm bảo lớp dịch vụ, lớp dịch vụ web hoặc cả hai?

Ví dụ:

Đối với tài nguyên Users có một UserWSUserService. Quản trị viên có thể tạo/cập nhật/xóa người dùng và Người dùng có thể đọc về những người dùng khác.
Giả sử UserWS bị ràng buộc là %root%/users Tôi sẽ xác định intercept-url cho url đó với quyền hạn ROLE_USER chỉ nói rằng bạn phải là người dùng để đến đó nhưng bản thân lớp dịch vụ sẽ chỉ định cơ quan cụ thể cho các phương pháp có liên quan.

Các tùy chọn khác bao gồm:

  • Đặt yêu cầu uỷ quyền như nhau trên cả hai dịch vụ và WS-
    Pro- Bạn sẽ lọc ra càng sớm càng những kẻ xâm nhập có thể (và tiết kiệm cho ví dụ chuyển đổi các thông số nếu bạn đang sử dụng mvc mùa xuân)
    Sao chép cấu hình là vấn đề bảo trì và là lỗi dễ bị => vấn đề bảo mật

  • Đặt authorizati vào yêu cầu chỉ trên WS-
    Pro- Lọc càng sớm càng tốt nếu đến từ WS
    Con- Lớp dịch vụ có thể được sử dụng từ ngữ cảnh khác nhau

  • tấm các yêu cầu uỷ quyền duy nhất trên dịch vụ-
    pro- Không sao chép
    Overhead Con- của việc cho phép "thẳng thừng" yêu cầu vớ vẩn đến nơi đến lớp dịch vụ

sẽ thực sự đánh giá cao bất kỳ thông tin phản hồi về các tùy chọn

Trả lời

5

Ittai, Sử dụng cùng một cơ chế bảo mật ở cả lớp WS và Service được coi là tự lặp lại - và yêu cầu bảo trì ở hai cấp độ này. Không có bất kỳ bảo mật nào ở lớp WS là một điều xấu - vì bạn thực sự cho phép bất kỳ ai xâm nhập vào hệ thống của bạn (ngay cả khi bạn chặn chúng sau này - nhiều người thấy điều đó là một điều xấu). Tóm lại, tôi nghĩ rằng bạn nên kết hợp hai thứ này - sử dụng một cơ chế rất thô ở lớp WS và một cơ chế rất mạnh ở tầng dịch vụ, Đó là cách bạn sẽ không lặp lại chính mình và không phải duy trì mã ở cả hai nơi (vì nó không phải là cấp độ bảo mật SAME); và bạn sẽ có thể lọc ra những người dùng chưa được cấp phép càng sớm càng tốt nhưng vẫn có mức độ bảo mật rất cao nơi cần đặt nó.

0

Tôi muốn nói cả hai nếu bạn có thời gian, chỉ có lớp dịch vụ nếu không.

Trình bày và dịch vụ an toàn luôn tốt cho bạn bởi vì nếu bạn tiếp xúc với dịch vụ khác với bản trình bày (ví dụ bạn trình bày dịch vụ web), bạn sẽ có bảo mật tại chỗ và đã thực hiện.

Ngoài ra nếu ai đó tìm cách vượt qua lớp trình bày của bạn (nói rằng bạn có tầng và dịch vụ của bạn chạy trên máy từ xa), bạn vẫn sẽ có bảo mật tại chỗ.

+0

cảm ơn câu trả lời của bạn, nhưng như tôi đã nói, nếu tôi chỉ có các cơ quan CÙNG trên cả hai thì đó là sự trùng lặp và dễ bị lỗi (do đó trách nhiệm bảo mật). Giả sử tôi chú thích lớp dịch vụ, bạn nghĩ gì tôi nên đặt trên WS và tại sao? Cảm ơn – Ittai

+0

IMHO bạn chỉ cần có một dịch vụ duy nhất có logic và có một đại diện giao diện người dùng cho dịch vụ đó và một đại biểu của WS. Bằng cách này, bạn chỉ cần chú thích dịch vụ cụ thể. Nói chung, nếu bạn không muốn sao chép, bạn phải bảo đảm thành phần chứa logic thực. – Simeon

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