Phiên làm việc & Bảo mật
Phiên làm việc tài liệu và kiểm soát truy cập
Một token Doconut rất mạnh: bất kỳ ai trình bày nó đều có thể yêu cầu mọi trang của tài liệu nếu nó không được ràng buộc với phiên mở. Trang này giải thích những gì một phiên chứa, thời gian tồn tại của nó, và các kiểm tra mà UseDoconut() bật theo mặc định.
Những gì một phiên tài liệu chứa
Mỗi OpenDocumentAsync thành công sẽ tạo một phiên trong IMemoryCache:
- trình xem định dạng đã tải (đối tượng engine tài liệu giữ tài liệu đã phân tích),
- trạng thái mỗi trang — xoay, lật và dữ liệu chú thích mà người dùng áp dụng trong widget,
- chỉ mục tìm kiếm tùy chọn, được xây dựng một cách lười biếng khi tìm kiếm đầu tiên (hoặc tải từ tệp
.srhđã được xây dựng trước trong các kịch bản web-farm), - đánh dấu nước của phiên từ
DocOptions.Watermark.
Thời gian tồn tại
Các phiên hết hạn theo cửa sổ trượt: DocOptions.TimeOut phút (mặc định 60), được đặt lại bởi mỗi yêu cầu trình bày token. Khi một phiên bị loại bỏ — do hết hạn hoặc bởi CloseDocument(token) — callback loại bỏ sẽ giải phóng engine tài liệu và giải phóng bộ nhớ liên quan ngay lập tức.
// Một phiên ngắn hạn cho bản xem trước một lần
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });Một yêu cầu với token đã hết hạn sẽ nhận được hình ảnh lỗi hiển thị Document session not found. Please re-open document. — client phải mở lại để lấy token mới.
Ràng buộc token tích hợp
Với UnsafeMode = false (mặc định), OpenDocumentAsync ràng buộc token mới với phiên ASP.NET của yêu cầu HTTP đã mở nó, bằng cách ghi một dấu hiệu secure-{token} vào phiên đó. Middleware Doconut sau đó từ chối phục vụ các trang cho bất kỳ phiên trình duyệt nào khác:
- Trình duyệt/phiên khác trình bày token bị đánh cắp → hình ảnh lỗi
You Are Not Authorized To View This Page. - Middleware phiên không được đăng ký → HTTP 500
Session middleware not configured. Call UseSession() before UseDoconut().
Đây là lý do tại sao Quick Start yêu cầu AddSession() + app.UseSession() trước nhánh Doconut. Hai hậu quả thực tế:
- Client phải gửi cookie phiên ASP.NET cùng với các yêu cầu trang. Các cấu hình cross-origin loại bỏ cookie (hoặc client API không có cookie jar) sẽ không vượt qua kiểm tra — đó là tính năng hoạt động, không phải lỗi.
options.UnsafeMode = truevô hiệu hoá hoàn toàn việc ràng buộc. Nó tồn tại cho các kịch bản kiểm soát (ví dụ: render server-to-server); để nófalsetrong môi trường sản xuất.
Ràng buộc token chỉ được kiểm soát bởi công tắc toàn cục UnsafeMode này — nó bật theo mặc định (UnsafeMode = false) và áp dụng cho mọi phiên. Không có tùy chọn tắt theo tài liệu; việc đặt UnsafeMode = true sẽ vô hiệu hoá ràng buộc trên toàn bộ.
Quyền truy cập và người dùng đã xác thực
Khi UnsafeMode là false, UseDoconut() tự động chèn DocumentAccessMiddleware trước middleware trang. Không đăng ký lại lần thứ hai. Khi một yêu cầu mang token, nó tra cứu quyền truy cập đã ghi khi tài liệu được mở và chỉ cho phép nếu tất cả các điều kiện sau đều đúng:
- một quyền đã tồn tại cho token,
- nó chưa hết hạn (thời gian sống của quyền =
TimeOutcủa tài liệu), - ID phiên ASP.NET yêu cầu khớp với ID đã mở tài liệu,
- nếu người mở đã xác thực, tuyên bố
NameIdentifiercủa người dùng yêu cầu cũng phải khớp.
Các lỗi trả về 403 — dưới dạng hình ảnh PNG lỗi cho các yêu cầu trang/thumbnail, và dưới dạng văn bản thuần cho các trường hợp khác. Thông báo và khóa truy vấn token đến từ DocumentSecurityOptions (TokenQueryKey, mặc định "token"; UnauthorizedMessage, mặc định "You Are Not Authorized To View This Page."). Cấu hình các tùy chọn này qua ASP.NET Core DI trước khi xây dựng ứng dụng. Nếu trạng thái phiên không khả dụng, middleware sẽ đóng lại với HTTP 500: ASP.NET Session is required for Doconut document security.
builder.Services.Configure<Doconut.Security.DocumentSecurityOptions>(options =>
{
options.TokenQueryKey = "token";
options.UnauthorizedMessage = "You Are Not Authorized To View This Page.";
});Middleware trang cốt lõi sau đó xác minh dấu hiệu phiên secure-{token} trước khi phục vụ tài liệu. Với UnsafeMode = true, UseDoconut() bỏ qua middleware truy cập và kiểm tra dấu hiệu cốt lõi cũng bị tắt.
Thu hồi
CloseDocument(token) không chỉ giải phóng bộ nhớ — nó còn loại bỏ dấu hiệu secure-{token} và thu hồi quyền truy cập, vì vậy một token đã đóng sẽ chết ngay trên cả hai lớp bảo mật.
Danh sách kiểm tra cho môi trường sản xuất
- Giữ
UnsafeMode = false(mặc định) — công tắc toàn cục này là thứ ràng buộc token với các phiên. - Đăng ký
AddDistributedMemoryCache()(các ứng dụng MVC và Razor Pages đã có) vàAddSession(), và gọiapp.UseSession()trước nhánh middleware Doconut. - Đảm bảo chính sách cookie phiên của bạn cho phép các yêu cầu widget mang cookie (
SameSite, HTTPS). - Sử dụng
CloseDocumentkhi người dùng rời tài liệu — cả bộ nhớ và bảo mật đều được cải thiện. - Không bao giờ ghi log hoặc chia sẻ token; coi chúng như chứng chỉ ngắn hạn.
Trang này có hữu ích không?