Nhảy đến nội dung chính

Trang 2: Bài toán nghiệp vụ & Giải pháp kỹ thuật

Dự án ra đời nhằm giải quyết 4 thách thức lớn trong quá trình vận hành hệ thống ký số cũ:

2.1 Thách thức 1: Phân mảnh backend (Fragmented APIs)

  • Bài toán: Client phải ghi nhớ và kết nối đồng thời nhiều địa chỉ Server khác nhau (Signing Engine, CRM, BPMN Server). Việc thay đổi IP/Domain của một Server yêu cầu cập nhật lại toàn bộ ứng dụng đầu cuối.
  • Giải pháp: Proxy cung cấp các Endpoint thống nhất (/api/sign/**/api/proxy/**). Các cấu hình Backend được quản lý tập trung trong file application.yml.

2.2 Thách thức 2: Độ trễ và mất kết nối mạng (Resiliency)

  • Bài toán: Các thao tác ký PDF là tác vụ nặng, yêu cầu thời gian xử lý và băng thông. Trong môi trường mạng không ổn định, các yêu cầu thường bị thất bại (Timeout).
  • Giải pháp: Tích hợp Spring Retry. Proxy sẽ tự động thử lại (tối đa 3 lần) với khoảng thời gian chờ (Backoff) trước khi trả về lỗi cho Client. Điều này giúp tăng tỷ lệ ký thành công mà người dùng không cần thao tác lại.

2.3 Thách thức 3: Bất tương thích tiêu chuẩn Header (Header Mapping)

  • Bài toán: Ứng dụng Client hiện tại sử dụng Header Token-Signing để lưu trữ mã định danh, nhưng các backend chuẩn REST thường yêu cầu Bearer Token trong Header Authorization.
  • Giải pháp: Proxy thực hiện ánh xạ tự động:
if (headers.containsKey("Token-Signing")) {
    headers.set(HttpHeaders.AUTHORIZATION, headers.getFirst("Token-Signing"));
}

Quá trình này diễn ra minh bạch, giúp Client không cần sửa mã nguồn cũ.

2.4 Thách thức 4: Phân vùng mạng và Bảo vệ hạ tầng

  • Bài toán: Signing Engine chứa các chứng thư số và khóa mật mã (PKCS#11, HSM), không được phép công khai ra ngoài Internet.
  • Giải pháp: Proxy được đặt trong phân vùng kiểm soát (DMZ), chỉ mở các cổng API cần thiết. Nó đóng vai trò là "người gác cổng", lọc các Header dư thừa (như hostcontent-length của Client) trước khi gửi vào mạng nội bộ để tránh xung đột giao thức.