Giao thức CLV1 đã công khaiĐọc đặc tả
Mục lục thư viện

Thư viện tài liệuTích hợp

Hệ thống hoạt động thế nào

ClavisAUH quyết định một điều cho phần mềm của bạn: máy này, lúc này, có được dùng không. Bài này giải thích bằng sơ đồ, từ vòng đời của license, thiết bị và phiên, tới từng câu phần mềm nói với máy chủ trong năm kịch bản thường gặp. Không cần biết gì về mật mã để đọc; phần cuối dành cho ai muốn hiểu lớp sâu.

5 phút đọc

Ba vòng đời

Mọi thứ xoay quanh ba đối tượng: license (quyền dùng, thường là một key), thiết bị (một máy đang giữ suất trên license) và phiên (một lần phần mềm đang chạy và được xác nhận).

License

Vòng đời license

  1. Tạo trong dashboard hoặc Seller API
  2. Gửi cho khách
  3. Kích hoạt trên máy đầu tiên
  4. Phần mềm kiểm tra định kỳ
  5. Gia hạn, hết hạn, tạm khoá hoặc thu hồi
  • Key mới tạo ở trạng thái chưa dùng. Thời hạn (nếu có) tính từ lần kích hoạt đầu, không phải từ lúc tạo.
  • Gần hết hạn, license được báo là sắp hết hạn để phần mềm nhắc người dùng; quá hạn thì còn ngày ân hạn của gói (nếu đặt), sau đó phần mềm nhận mã license_expired.
  • Tạm khoá có thể mở lại; thu hồi là vĩnh viễn. Cả hai có hiệu lực ngay ở lượt gọi kế tiếp, và phần mềm thôi chạy offline khi nghe thấy.
  • Key thử nghiệm (TEST) hết hạn 24 giờ sau khi tạo, không có ân hạn. Xem Tạo và quản lý license.

Thiết bị

Vòng đời thiết bị

  1. Máy tự tạo dấu nhận diện và khoá riêng
  2. Giữ một suất trên license
  3. Đổi phần cứng nhỏ vẫn là máy cũ
  4. Chuyển máy hoặc im lặng lâu thì trả suất
  • Dấu nhận diện được ghép từ các mã phần cứng đã băm (mã máy, MAC, CPU); giá trị thật không rời khỏi máy.
  • Mỗi lần cài, SDK tạo một khoá thiết bị và lưu lại trên máy. Khoá này ký mọi yêu cầu, nên phiên của máy này không dùng được ở máy khác.
  • Mỗi license có số máy tối đa. Máy đổi vài linh kiện vẫn được nhận là máy cũ nếu đủ số thành phần khớp (mặc định 3).
  • Máy im lặng quá thời hạn của gói (mặc định 72 giờ) tự trả suất cho máy khác; quay lại mà còn suất thì vẫn là máy cũ. Khách có thể chuyển máy theo giới hạn của gói. Xem Thiết bị, HWID và chuyển máy.

Phiên

Vòng đời phiên

  1. Kích hoạt hoặc đăng nhập mở phiên
  2. Heartbeat giữ phiên sống
  3. Mất mạng thì dùng token offline đã lưu
  4. Đăng xuất hoặc hết hạn
  • Một phiên sống một giờ nếu không có heartbeat; phần mềm gửi heartbeat vài phút một lần trong lúc chạy.
  • Câu trả lời đăng nhập và heartbeat cho biết khi nào gọi lại, trong trường có ký nextCheckSeconds (mặc định 30 phút). nextCheckIn của SDK cộng thêm phần chênh tối đa một phần năm, cố định theo từng máy, để hàng nghìn bản không gọi cùng lúc.
  • Mỗi lần kích hoạt và heartbeat, trên mọi gói, SDK nhận một token offline có chữ ký, trừ khi Chế độ chỉ online đang bật. Lưu nó lại: khi không có mạng, SDK kiểm token ngay trên máy, không cần máy chủ. Token chỉ hợp lệ cho đúng máy đó, tới hạn của nó (mặc định 7 ngày, Premium tự chọn thời hạn), và bị từ chối nếu đồng hồ máy bị vặn lùi. License đã thu hồi vẫn có thể chạy offline tới lúc đó. Xem License offline.

Phần mềm nói chuyện với máy chủ ra sao

Mỗi kịch bản dưới đây có một dự án mẫu chạy trong CI cho mọi ngôn ngữ; trình Kết nối phần mềm của mỗi app cho tải về đã điền sẵn cài đặt.

K1 · Chỉ license key

  1. Phần mềm → Máy chủinit (phiên bản, sửa lệch giờ nếu có)
  2. Phần mềm → Máy chủactivate(key, thiết bị)
  3. Máy chủ → Phần mềmphiên, license, quyền tính năng, biến, token offline
  4. Phần mềm lưu token offline lên đĩa
  5. Phần mềm → Máy chủheartbeat, vài phút một lần
  6. Phần mềm → Máy chủlogout khi đóng

Không có mạng ở lần chạy sau: SDK tự thử lại, rồi báo network_error hoặc timeout, phần mềm kiểm token đã lưu và tiếp tục nếu token còn hợp lệ.

K2 · Tài khoản

  1. Phần mềm → Máy chủregister(tên, mật khẩu), lần đầu
  2. Máy chủ → Phần mềmtài khoản trên gói miễn phí và phiên
  3. Phần mềm → Máy chủlogin(tên, mật khẩu), những lần sau
  4. Phần mềm → Máy chủredeem(key) khi khách mua
  5. Máy chủ → Phần mềmtài khoản đã nâng cấp, quyền tính năng mới

Sai mật khẩu và tài khoản không tồn tại trả cùng một mã (invalid_credentials), để không ai dò được tên đăng nhập.

K3 · Dùng thử theo máy

  1. Phần mềm → Máy chủtrial(thiết bị)
  2. Máy chủ → Phần mềmphiên dùng thử và ngày hết thử
  3. Máy đã thử rồi hoặc hết thử thì nhận trial_used hoặc trial_expired
  4. Phần mềm → Máy chủactivate(key) khi khách nhập key

Mỗi máy chỉ được thử một lần cho mỗi app, dù cài lại phần mềm.

K4 · Hạn dùng và biến từ máy chủ

  1. Phần mềm → Máy chủactivate(key)
  2. Máy chủ → Phần mềmlicense kèm ngày hết hạn và trạng thái
  3. Phần mềm → Máy chủvariables, bằng phiên vừa mở
  4. Máy chủ → Phần mềmcác biến của app, của license, của người dùng

Biến chỉ đọc được bằng phiên hợp lệ; biến của license hay người dùng đè lên biến chung cùng tên. Xem Biến ứng dụng.

K5 · Cập nhật phần mềm

  1. Phần mềm → Máy chủcheck_updates(kênh)
  2. Máy chủ → Phần mềmmanifest bản mới, ký bằng khoá của app, hết hiệu lực sau 10 phút
  3. SDK chỉ tin manifest có chữ ký đúng, đúng app và còn hạn
  4. Phần mềm → Máy chủtải file qua link có hạn 5 phút
  5. SDK so SHA-256 của file với manifest, khác thì từ chối

Bản quá cũ hoặc bị chặn nhận update_required hay build_blocked ngay ở init. Xem Bản phát hành có ký và cập nhật.

Khi có lỗi

Mọi lỗi đều là một mã trong một bảng chung cho mọi SDK, thư viện C và công cụ dòng lệnh. SDK có sẵn câu giải thích cho người dùng cuối (tiếng Việt và tiếng Anh) và biết mã nào nên thử lại sau. Xem Mã lỗi.

SDK còn tự thử lại, với thời gian chờ tăng dần và ngẫu nhiên, mặc định thêm hai lần:

  • Không có trả lời, hoặc trang lỗi 5xx không ký. Chỉ thử lại các lượt gọi an toàn khi lặp: init, activate, login, heartbeat, variables, updates, logout và report. trial, register, redeem và transfer không bao giờ được gửi lại sau khi mất câu trả lời, vì có thể chúng đã chạy xong.
  • Máy chủ bảo chờ. rate_limited có ký, hoặc 429, 503 không ký, được thử lại ở mọi lượt gọi, theo Retry-After tối đa 30 giây.

Chỉ chữ ký đã xác minh mới đổi được trạng thái license: trang không ký từ thiết bị trung gian chỉ là một lần thử hỏng. Số lần thử lại và các địa chỉ dự phòng là tuỳ chọn của SDK (maxRetries và fallbackUrls trong JavaScript), đặt 0 lần là tắt.

Lớp sâu: vì sao không giả được

  • Chữ ký hai chiều. Mỗi yêu cầu được khoá thiết bị ký (Ed25519) trên toàn bộ nội dung, thời điểm và một số dùng một lần. Mỗi câu trả lời, kể cả lỗi, được khoá của app ký, gắn với đúng yêu cầu, đường dẫn và mã trạng thái. SDK chỉ cần khoá công khai của app để kiểm, nên nhúng nó vào phần mềm là an toàn.
  • Chống phát lại. Máy chủ nhớ số dùng một lần trong vài phút và chỉ nhận yêu cầu lệch giờ không quá 60 giây; đồng hồ máy sai thì SDK tự chỉnh theo câu trả lời có ký rồi gửi lại.
  • Máy chủ giả vô dụng. Câu trả lời không ký, ký bằng khoá lạ, sửa nội dung hay quá cũ đều bị SDK từ chối như không có trả lời, và được báo cho Protect ở lượt gọi tốt kế tiếp.

Đặc tả đầy đủ và bộ vector kiểm thử cho ai tự viết client: Đặc tả giao thức CLV1.

Bạn cần giúp gì?

Câu hỏi thường gặp

ClavisAUH là gì?

Dịch vụ bản quyền và xác thực cho phần mềm desktop: license key, khoá thiết bị, đăng nhập người dùng và phản hồi có chữ ký. Tất cả quản lý trên một dashboard

Vì sao kẻ crack không làm giả được server?

SDK chỉ tin câu trả lời ký bằng khoá bí mật của ứng dụng. Khoá đó không bao giờ rời server của chúng tôi, nên server giả không ký được và bị từ chối

Trong file chạy của tôi có gì?

Mã ứng dụng và khoá công khai. Không có bí mật nào, vì mỗi thiết bị tự tạo cặp khoá riêng ở lần chạy đầu

Có chạy được khi offline không?

Có. Mọi gói đều có token offline có chữ ký dùng được 7 ngày, ứng dụng tự kiểm tra tại máy. Premium cho bạn chọn bao lâu. License đã thu hồi vẫn có thể chạy offline trong khoảng đó, trừ khi Chế độ chỉ online đang bật

Hỗ trợ những ngôn ngữ nào?

Hiện có JavaScript và TypeScript. Tiếp theo là C++, C# và Python, cùng một giao thức công khai

Gói Basic có miễn phí thật không?

Có. Không giới hạn thời gian, không cần thẻ. Cần nhiều hơn thì lên Premium

Liên hệ