2015-08-14 14 views
7

Chúng tôi có một ứng dụng kinh doanh cỡ trung bình và chúng tôi sử dụng vai trò và quyền hạn bảo mật Spring (RBAC) với một kludge lớn để bật và tắt vai trò cho các trường hợp nhất định cộng với các quy tắc ẩn trong Spel trong các thẻ @PreAuthorize.Bảo mật mùa xuân và ABAC (Kiểm soát truy cập dựa trên thuộc tính)

Tôi nghĩ rằng những gì chúng tôi đã thực sự triển khai (mà không biết đó là ABAC). XACML trông rất phức tạp và cồng kềnh vì vậy tôi không quan tâm đến câu trả lời ở đây:

How to change Spring Security roles by context?

Có ai làm được một khối lượng thực hiện ABAC ánh sáng mà không XACML? Tôi hy vọng rằng sẽ cho chúng ta sự phân tách các mối quan tâm vì các đối tượng miền chỉ làm @PreAuthorize (VIẾT) vv và chính sách ủy quyền của chúng ta sẽ được tách rời khỏi nó.

Từ những gì tôi đã đọc hiệu trưởng cơ bản của ABAC rất đơn giản. Bạn có một Hành động (giống như một Giấy phép) và một cơ chế để giải quyết nếu Hiệu trưởng hiện tại có sự cho phép đó đối với một Chủ thể cụ thể.

Tôi biết về AccessDecisionVoter gần đúng loại giao diện nhưng tôi không nghĩ rằng nó được dùng để bỏ phiếu cho các quyền. Tuy nhiên, việc thực hiện chính sách ủy quyền của chúng tôi với các trường hợp giống như vậy dường như rất hấp dẫn.

Xin lỗi vì câu hỏi rambling! Về cơ bản tôi rất thú vị trong ABAC nhưng muốn tránh pha chế tại nhà nhưng lo lắng XACML là một loại máy bay phản lực khổng lồ khi chúng ta cần một chiếc Cessna.

+0

Điều gì khiến bạn nghĩ XACML là bánh xe máy kéo? Thật đơn giản để thực hiện –

+0

Có sự tích hợp trực tiếp giữa bảo mật mùa xuân và XACML thông qua plugin mùa xuân Axiomatics –

+1

Xin chào David, Nhìn vào nguồn XACML rất dài dòng và phức tạp. Tôi đã chơi với những gì các quy tắc sẽ giống như trong Java nó là đơn giản và chúng tôi đã có bộ kỹ năng đó, nó là thời gian biên dịch kiểm tra ... Ngoài ra Axiomatics có vẻ là công việc thực sự hoạt động duy nhất trên XACML. Tôi có thể tưởng tượng XACML/Axiomatics sẽ tốt cho một doanh nghiệp lớn nhưng đó không phải là chúng tôi. Xin lỗi "bánh xe máy kéo" bị ốm. Jumbo máy bay phản lực khi chúng ta cần một Cessna? Tôi sẽ chỉnh sửa câu hỏi của mình. – salk31

Trả lời

9

Dường như có hai điều bạn đang hướng tới:

  1. phép ra ngoài, nơi bạn muốn di chuyển các chính sách kiểm soát truy cập ra khỏi mã (hoặc ít nhất vào một vị trí trung tâm trong các mã và không phân tán trên mã Spring)
  2. thuộc tính dựa ủy quyền, nơi bạn muốn sử dụng các thuộc tính phong phú hơn hơn vai trò và quyền

tôi không phải là rất chắc chắn về (2) kể từ những gì bạn nói rằng bạn muốn làm, "hành động và một cơ chế để giải quyết nếu cu rrent Hiệu trưởng có sự cho phép ", vẫn còn, trong cuốn sách của tôi, RBAC. Bạn có các điều kiện khác mà các quyết định cấp quyền truy cập cần phải dựa trên không? Vị trí của người dùng, thời gian trong ngày, giá trị của dữ liệu nhất định trong cơ sở dữ liệu, thuộc tính của tài nguyên đang được thực hiện trên v.v ...? Nếu vậy, chúng ta sẽ đi lạc vào thế giới ABAC. Dù bằng cách nào, tôi sẽ nói rằng RBAC là một tập hợp con của ABAC vì vai trò chỉ là một thuộc tính.

Bây giờ, đối với (1), mẫu chung sẽ là tập trung đầu tiên vào công cụ ủy quyền và sử dụng chú thích Spring để gọi authz này. động cơ cho các quyết định truy cập. Bạn có hai lựa chọn ở đây:

  • authz nhúng. động cơ: nơi một thư viện triển khai động cơ và được mã lệnh gọi như một hàm Java. Có thể là công cụ XACML hoặc có thể là việc triển khai RBAC/ABAC của riêng bạn
  • như một dịch vụ mạng: nơi dịch vụ dựa trên mạng (micro) trả lời các câu hỏi quyết định kiểm soát truy cập. Có thể là một động cơ XACML hoặc có thể tự thực hiện RBAC/ABAC bạn

Để lấy mã Xuân dựa để gọi authz này. động cơ, một cách tiếp cận sẽ là viết cử tri bảo mật mùa xuân của riêng bạn.Một cách khác, mà tôi thấy dễ dàng hơn nhiều, là viết các biểu thức dựa trên ngôn ngữ biểu thức mùa xuân của riêng bạn mà sau đó bạn có thể gọi bằng @PreAutorize, @PostAuthorize, @PreFilter và @PostFiler hiện tại, giây: ủy quyền thẻ và thậm chí từ chặn-url điều kiện.

Đây là những gì tôi đã sử dụng khi tôi làm việc trên Spring Security XACML PEP SDK của chúng tôi. Cách tiếp cận này sẽ hoạt động tốt như nhau ngay cả khi bạn quyết định không sử dụng XACML cho các chính sách quyết định truy cập của bạn hoặc thông báo yêu cầu/phản hồi.

+0

Rất cám ơn câu trả lời chi tiết. Để thử và giải thích lý do tại sao tôi nghĩ rằng tôi có thể cần ABAC: Một quy tắc là "nếu adminRole hoặc (! This.submitted và! This.historic và ((this.confidential và powerRole) hoặc (! This.confidential and inASetOfPeopleResponsibleForThisObject)) xin lỗi vì Tôi hoàn toàn đồng ý rằng một phần của giải pháp là RBAC nhưng chúng tôi có rất ít "tĩnh" vai trò so với những người phụ thuộc vào một mối quan hệ với các đối tượng .. – salk31

+1

Yup, những gì bạn mô tả chắc chắn vượt ra ngoài RBAC. Hãy nghĩ rằng cách tiếp cận mà tôi đã đề cập ở trên sẽ vẫn làm việc cho bạn –

+0

Cảm ơn Srijith. Nếu bạn là một trong những người cuối cùng kiểm tra/nắm giữ sự tỉnh táo thì không có động cơ ABAC mã nguồn mở mà bạn biết? đơn giản vi-framework? Tôi đã gõ với nhau một bằng chứng về khái niệm nhưng đó luôn luôn là bit dễ dàng;) – salk31

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