[Open Source] #128 - OpenSign: Nền tảng E-Signature mã nguồn mở với React 19, Parse Server và kiến trúc ký số PKCS#7 bảo mật
Trong kỷ nguyên số, việc ký kết tài liệu (hợp đồng, hóa đơn) đòi hỏi sự kết hợp giữa tính tiện lợi và tính pháp lý. Các giải pháp như DocuSign hay HelloSign thường có chi phí rất cao và dữ liệu bị kiểm soát bởi bên thứ ba. OpenSign ra đời như một sự thay thế "Enterprise-grade" mã nguồn mở, cung cấp toàn bộ quy trình từ tải lên, kéo-thả vị trí ký đến việc phát hành chứng chỉ hoàn tất (Audit Trail) với độ bảo mật chuẩn công nghiệp.
Dưới góc độ kỹ thuật, OpenSign là bài học mẫu mực về việc xử lý Annotation trên tài liệu PDF, kỹ thuật ký số phía server và kiến trúc Multi-tenancy cho doanh nghiệp.
Github: https://github.com/OpenSignLabs/OpenSign
🛠️ 1. Nền tảng công nghệ: Sự kết hợp giữa React 19 và Parse Server
OpenSign sử dụng một ngăn xếp công nghệ tập trung vào tính Module và khả năng mở rộng:
- Frontend (React 19 & Vite): Tận dụng phiên bản React mới nhất để tối ưu hóa hiệu năng render. Giao diện được xây dựng bằng Tailwind CSS và DaisyUI, hỗ trợ hoàn hảo chế độ Dark Mode và tùy biến thương hiệu (White-label).
- Backend (Parse Server & Node.js): Thay vì viết backend từ đầu, dự án sử dụng Parse Server (Open-source MBaaS). Điều này giúp tự động hóa việc quản lý Database Schema, xác thực (Auth), và xử lý file thông qua các API linh hoạt.
- PDF Core (pdf-lib & Konva):
- pdf-lib: Xử lý cấu trúc nhị phân của PDF (trích xuất trang, nhúng font).
- Konva: Tạo ra một lớp Canvas phía trên tài liệu, cho phép người dùng thực hiện các thao tác Kéo-Thả (Drag & Drop) các Widget ký một cách mượt mà.
- Digital Signing Stack: Sử dụng
@signpdf/signpdf,pkijsvànode-forgeđể thực hiện ký số theo tiêu chuẩn PKCS#7, đảm bảo tính toàn vẹn của tài liệu sau khi ký.
🏗️ 2. Trụ cột kiến trúc: Multi-tenancy và Audit Trail
Kiến trúc của OpenSign được thiết kế để phục vụ các tổ chức từ nhỏ đến lớn:
- Tenant-based Data Isolation: Hệ thống hỗ trợ đa tổ chức (Multi-tenancy). Mỗi bản ghi tài liệu đều gắn liền với một
TenantId, đảm bảo sự tách biệt dữ liệu tuyệt đối giữa các doanh nghiệp chạy trên cùng một hạ tầng. - Event-driven Lifecycle: Tận dụng hệ thống Hook của Parse Server (
afterSave,beforeSave). Ngay khi người cuối cùng thực hiện ký, một sự kiện được kích hoạt để tự động hóa việc làm phẳng tài liệu (Flattening) và gửi email thông báo bản sao cho tất cả các bên. - Digital Audit Trail: Mỗi tài liệu sau khi hoàn tất đều đi kèm một "Chứng chỉ hoàn thành". Kỹ thuật này bao gồm việc ghi lại lịch sử IP, Email, Dấu thời gian (Timestamp) và mã băm (Hash) của tài liệu để phục vụ việc đối soát pháp lý khi cần thiết.
🔄 3. Workflow: Vòng đời của một quy trình ký kết (Sequence Diagram)
Sơ đồ mô tả luồng xử lý từ lúc chủ sở hữu tải file đến khi tài liệu được ký số chính thức:
⚡ 4. Các kỹ thuật "Pro-level" trong mã nguồn
- Coordinate-Mapping Scaling: Một kỹ thuật cực khó là đảm bảo vị trí chữ ký trên màn hình (Canvas) khớp chính xác 100% với vị trí trong tệp PDF vật lý bất kể độ phân giải màn hình. OpenSign thực hiện tính toán tỷ lệ (Scaling ratio) giữa tọa độ Viewport và tọa độ PDF thô (Points).
- Server-side Docx Conversion: Tích hợp LibreOffice ngay trong Docker container. Khi người dùng tải lên tệp
.docx, server sẽ tự động chuyển đổi sang.pdftrước khi chuyển sang giai đoạn gắn widget, giúp hệ thống tương thích với mọi loại tài liệu văn phòng. - Guest Authentication (OTP): Hệ thống cho phép người dùng không có tài khoản (Guests) tham gia ký kết một cách an toàn thông qua cơ chế One-Time Password gửi qua Email, giảm thiểu rào cản người dùng trong khi vẫn duy trì tính xác thực.
- Flexible Storage Adapter: Kiến trúc cho phép người dùng tùy biến nơi lưu trữ tài liệu nhạy cảm: từ ổ đĩa local đến các dịch vụ đám mây (AWS S3, DigitalOcean Spaces) chỉ bằng cách thay đổi cấu hình adapter.
⚖️ 5. So sánh chiến lược
| Tiêu chí | OpenSign | DocuSign (SaaS) | Documenso |
|---|---|---|---|
| Quyền sở hữu dữ liệu | Tuyệt đối (Self-host) | Phụ thuộc nhà cung cấp | Tuyệt đối (Self-host) |
| Kiến trúc Backend | Parse Server (Linh hoạt) | Proprietary | Next.js (Serverless) |
| Chữ ký số | PKCS#7 (Tiêu chuẩn cao) | Có hỗ trợ | Có hỗ trợ |
| White-labeling | Rất dễ (Mã nguồn mở) | Rất đắt | Có hỗ trợ |
| Cơ sở dữ liệu | MongoDB (NoSQL) | SQL-based | PostgreSQL |
✅ Kết luận: Tại sao OpenSign là bài học giá trị cho lập trình viên?
OpenSign không chỉ là một công cụ; nó là một bài học về việc quản lý vòng đời tài liệu nhạy cảm. Việc xử lý đồ họa phức tạp trên trình duyệt (Canvas) kết hợp với các thuật toán ký số bảo mật phía backend đã biến dự án này thành một hệ thống thay thế DocuSign mạnh mẽ nhất hiện nay.
Đối với các kỹ sư Fullstack, nghiên cứu OpenSign giúp bạn hiểu sâu về:
- Kỹ thuật xử lý PDF Annotation nâng cao.
- Cách vận hành Parse Server để tăng tốc phát triển Backend.
- Tư duy thiết kế Audit Trail cho các hệ thống yêu cầu tính pháp lý.
All Rights Reserved
