Hiện tại, khi đang làm dự án ở công ty, có tiếp xúc và sử dụng Keycloak tôi nhận thấy, nó là một open source, đầy đủ tính năng, dễ sử dụng và config.

Các cơ chế, chính sách xác thực và phân quyền như sau:

  • Attribute-based access control (ABAC)
  • Role-based access control (RBAC)
  • User-based access control (UBAC)
  • Context-based access control (CBAC)
  • Rule-based access control (Using JavaScript)
  • Time-based access control
  • Support for custom access control mechanisms (ACMs) through a Service Provider Interface (SPI)

Tạm bỏ qua các phần trên, trong một bài viết khác, chúng ta sẽ tìm hiểu các keywords, thuật ngữ trong cơ chế xác thực, phân quyền trong keycloak

Resource Server

-> Là một server / hosting nơi bảo vệ các tài nguyên(resources) và có khả năng cho phép truy cập / ngăn chặn và trả về các yêu cầu tài nguyên (resource requests)

Bằng cách nào để truy cập tới các tài nguyên ?

  • RESTful API cùng với bearer token trên mỗi request
  • Session của user đang đăng nhập

Resource

-> Là một phần tài sản của hệ thống/ ứng dụng/ tổ chức. Như là một bức ảnh, video, một trang HTML, object, json ..... Bằng các cơ chế xác thực, phân quyền thì tài sản của ai sẽ thuộc về người đó

VD: Trên hệ thống ngân hàng thì tiền của tôi thì chỉ tôi truy cập và lấy được, chứ đéo phải thằng hàng xóm

Scope

-> Là phạm vi truy cập của một đối tượng vào một resource. Hiểu đơn giản là có quyền thực hiện một hành động nào đó với đối tượng.

VD: Tôi có quyền xem, thêm, bớt số tiền trong ngân hàng

Permission

-> Đây chính là hành động được nhắc đến ở bên trên. Tức là có quyền truy cập, tác động vào đối tượng đó hay không ?

Policy

-> Chính sách như một điều kiện để thỏa mãn quyền truy cập tới resource. Không giống như Permission. ở đây policy là điều kiện cụ thể nhằm đáp ứng một tài nguyên cụ thể.

Đây chính là điều kiện để đáp ứng có thể truy cập vào một tài Resource, Scope hay không ?

-> Đấy chính là chìa khóa để áp dụng các cơ chế như ABAC, RBAC, CBAC hoặc kết hợp tất cả.

=> Hiểu đơn giản đây là câu lệnh if ấy

Policy provider

-> Cung cấp cơ chế thực thi policy cho từng loại policy cụ thể.

Permission ticket

-> Là token được tạo ra trong đó thể hiện được chính xác những resource, scope nào được truy cập cũng như là cơ chế để xác thực các quyền truy cập vào các tài sản đó.