The migration to Keycloak is necessitated by the planned deprecation of Oauth2 Authorization Server by Spring Security in 2021 in favour of Keycloak.
Below are the key advantages of using Keycloak for identity management:
No overhead work to maintain and improve user management as in the case of a custom solution
Ability to utilize and leverage on other open source tools using existing standards
Ability to have single sign-on for all systems for one user
There is an audit trail for security and compliance measures
Architecture
System Architecture for Web-based Applications Using Authentication Code for Implicit Grant Types
This method requires that credentials collection is done by the identity management system. The user is redirected to a login page availed by the identity management. The authenticating application does not collect a user's credentials.
See the flow below:
Users are pre-configured in Keycloak by a Keycloak administrator.
A user requesting access to OpenSRP Web is redirected to the Keycloak login form.
They are prompted to enter an existing username and password.
The credentials are validated against entries in the Keycloak database.
On successful login, a bearer access token is generated.
The user is redirected back to OpenSRP, with a bearer access token attached.
OpenSRP Web then attaches the bearer access token for requests to OpenSRP Server API.
On receipt of API requests, OpenSRP Server API validates the access token against the Keycloak Identity System before performing actions initiated by the calls.
System Architecture for Android Applications Using Password Grant Type
This grant type requires that a user’s credentials be collected by the application. The application then forwards the credentials to the identity management system which verifies the credentials and returns an access token.
Users are pre-configured in Keycloak by a Keycloak administrator.
A user requiring access to OpenSRP API sends is a username and password to Keycloak.
The credentials are validated against entries in the Keycloak database.
If valid, a bearer access token is generated and return to the calling application.
The client then avails this bearer token for requests to the OpenSRP Server API.
On receipt of API requests, OpenSRP Server API validates the access token against the Keycloak Identity System before performing actions initiated by the calls.
...
Custom Login/Decoupling from Keycloak API
With the above architecture, if we desire to use a custom login page we would have to customize Spring Security configuration so that OpenSRP login page defined in the application is used. On data submission, a JSON payload is created as per Keycloak specifications and a Keycloak API request is invoked which will return the access and refresh tokens.
Decoupling from Keycloak User and Role Management
It is possible to create a web UI for defining users, roles and user roles mapping. These are then saved in Keycloak via a Rest API.
A Keycloak superadmin would have to be configured in playbooks to enable such access via API.
Alternatively during deployment a Keycloak client can be configured that uses client credentials that can be used for making API calls for setting up Keycloak.
Implementation Details
The generic implementation is expected to cater for any Identity Management solution.
The considerations for this are:
The tool needs to be easily replaceable
It should not warrant massive changes in other applications that use it
The integration should be minimal and based on protocols only
Decoupling Implementation where we are only integrating with the protocol and not the tool
So that we can change the tool without changing the other systems
Have a minimal part integrating with Keycloak
System Interaction
What the architecture would look like for deployment? Storage, how services are exposed,
How OpenSRP connects with Keycloak?
There is a native interface. Redirect to Keycloak
Build our own user interface, making it easier to replace. Invoke Keycloak APIs to post/get the data
Documentation to be looked at
Interaction Diagram for the Mobile ClientsViệc di chuyển sang Keycloak là bắt buộc do Spring Security có kế hoạch ngừng sử dụng Máy chủ ủy quyền Oauth2 vào năm 2021 để thay thế cho Keycloak.
Dưới đây là những ưu điểm chính của việc sử dụng Keycloak để quản lý danh tính:
Không có công việc tốn kém để duy trì và cải thiện việc quản lý người dùng như trong trường hợp giải pháp tùy chỉnh
Khả năng sử dụng và tận dụng các công cụ nguồn mở khác bằng các tiêu chuẩn hiện có
Khả năng đăng nhập một lần cho tất cả các hệ thống cho một người dùng
Có một lộ trình kiểm tra các biện pháp bảo mật và tuân thủ
Architecture
Kiến trúc hệ thống cho các ứng dụng dựa trên web sử dụng mã xác thực cho các loại cấp phép ngầm
Phương pháp này yêu cầu việc thu thập thông tin xác thực được thực hiện bởi hệ thống quản lý danh tính. Người dùng được chuyển hướng đến một trang đăng nhập do quản lý danh tính cung cấp. Ứng dụng xác thực không thu thập thông tin xác thực của người dùng.
Xem dòng chảy dưới đây:
Người dùng được cấu hình sẵn trong Keycloak bởi quản trị viên Keycloak.
Người dùng yêu cầu quyền truy cập vào OpenSRP Web sẽ được chuyển hướng đến biểu mẫu đăng nhập Keycloak.
Họ được nhắc nhập tên người dùng và mật khẩu hiện có.
Thông tin đăng nhập được xác thực dựa trên các mục trong cơ sở dữ liệu Keycloak.
Khi đăng nhập thành công, mã thông báo truy cập mang theo sẽ được tạo.
Người dùng được chuyển hướng trở lại OpenSRP, có đính kèm mã thông báo truy cập mang.
Sau đó, OpenSRP Web sẽ đính kèm mã thông báo truy cập mang theo cho các yêu cầu tới API máy chủ OpenSRP.
Khi nhận được yêu cầu API, API máy chủ OpenSRP xác thực mã thông báo truy cập dựa trên Hệ thống nhận dạng Keycloak trước khi thực hiện các hành động do cuộc gọi bắt đầu.
...
Kiến trúc hệ thống cho ứng dụng Android sử dụng loại cấp mật khẩu
Loại cấp phép này yêu cầu ứng dụng phải thu thập thông tin xác thực của người dùng. Sau đó, ứng dụng sẽ chuyển tiếp thông tin xác thực đến hệ thống quản lý danh tính để xác minh thông tin xác thực và trả về mã thông báo truy cập.
Người dùng được cấu hình sẵn trong Keycloak bởi quản trị viên Keycloak.
Người dùng yêu cầu quyền truy cập vào API OpenSRP sẽ gửi tên người dùng và mật khẩu vào Keycloak.
Thông tin đăng nhập được xác thực dựa trên các mục trong cơ sở dữ liệu Keycloak.
Nếu hợp lệ, mã thông báo truy cập mang sẽ được tạo và quay lại ứng dụng gọi điện.
Sau đó, khách hàng sẽ sử dụng mã thông báo mang này cho các yêu cầu tới API máy chủ OpenSRP.
Khi nhận được yêu cầu API, API máy chủ OpenSRP xác thực mã thông báo truy cập dựa trên Hệ thống nhận dạng Keycloak trước khi thực hiện các hành động do cuộc gọi bắt đầu.
Đăng nhập tùy chỉnh/Tách khỏi API Keycloak
Với kiến trúc trên, nếu chúng ta muốn sử dụng trang đăng nhập tùy chỉnh, chúng ta sẽ phải tùy chỉnh cấu hình Spring Security để sử dụng trang đăng nhập OpenSRP được xác định trong ứng dụng. Khi gửi dữ liệu, tải trọng JSON được tạo theo thông số kỹ thuật của Keycloak và yêu cầu API Keycloak được gọi sẽ trả về quyền truy cập và mã thông báo làm mới.
Tách khỏi quản lý vai trò và người dùng Keycloak
Có thể tạo giao diện người dùng web để xác định người dùng, vai trò và ánh xạ vai trò người dùng. Sau đó, chúng được lưu trong Keycloak thông qua Rest API.
Quản trị viên cấp cao Keycloak sẽ phải được định cấu hình trong sổ tay để cho phép quyền truy cập đó thông qua API.
Ngoài ra, trong quá trình triển khai, bạn có thể định cấu hình ứng dụng khách Keycloak để sử dụng thông tin xác thực ứng dụng khách có thể được sử dụng để thực hiện lệnh gọi API nhằm thiết lập Keycloak.
Chi tiết triển khai
Việc triển khai chung dự kiến sẽ phục vụ cho mọi giải pháp Quản lý danh tính.
Những cân nhắc cho việc này là:
Công cụ cần phải dễ dàng thay thế
Nó không nên đảm bảo những thay đổi lớn trong các ứng dụng khác sử dụng nó
Việc tích hợp phải ở mức tối thiểu và chỉ dựa trên các giao thức
Tách rời Triển khai trong đó chúng tôi chỉ tích hợp với giao thức chứ không phải công cụ
Để chúng ta có thể thay đổi công cụ mà không cần thay đổi các hệ thống khác
Có một phần tối thiểu tích hợp với Keycloak
Tương tác hệ thống
Kiến trúc sẽ trông như thế nào khi triển khai? Lưu trữ, cách các dịch vụ được hiển thị,
OpenSRP kết nối với Keycloak như thế nào?
Có một giao diện gốc. Chuyển hướng đến Keycloak
Xây dựng giao diện người dùng của riêng chúng tôi, giúp việc thay thế dễ dàng hơn. Gọi API Keycloak để đăng/lấy dữ liệu
Tài liệu cần xem
Sơ đồ tương tác dành cho khách hàng di động
...
Interaction Diagram for OpenSRP Web
...
Controls and Level of Access
OpenSRP or any other application using Keycloak defines the levels of access for the configured users. Access to resources by the user is controlled by the resource server.
Extensibility
Visit Keycloak Extensions page to view the available extensions.
Keycloak also has APIs that can be used by third party systems. For example, Jenkins supports authentication using Keycloak.
Supported Protocols
...
Kiểm soát và cấp độ truy cập
OpenSRP hoặc bất kỳ ứng dụng nào khác sử dụng Keycloak xác định cấp độ truy cập cho người dùng được định cấu hình. Quyền truy cập vào tài nguyên của người dùng được kiểm soát bởi máy chủ tài nguyên.
Khả năng mở rộng
Truy cập trang Tiện ích mở rộng Keycloak để xem các tiện ích mở rộng có sẵn.
Keycloak cũng có các API có thể được sử dụng bởi hệ thống của bên thứ ba. Ví dụ: Jenkins hỗ trợ xác thực bằng Keycloak.
Giao thức được hỗ trợ
Keycloak hỗ trợ các giao thức sau. Truy cập trang này để biết thêm chi tiết về các giao thức được hỗ trợ.
OIDC
SAML