Signed URL và Embed Token
Mỗi video trên AVCaption có một embed token trong URL: https://avcaption.com/watch/{embed_token}. Token là chứng chỉ truy cập — bất kỳ ai có token hợp lệ đều phát được, ai không có thì bị từ chối.
Với nội dung miễn phí hoặc công khai, bạn sinh một token cho mỗi video và nó tồn tại mãi. Với nội dung trả phí hoặc gated, bạn sinh token mới mỗi phiên đã xác thực qua REST API.
Token hoạt động thế nào
Token là chuỗi opaque ngắn (mặc định 32 ký tự hex). Ở server nó ánh xạ tới:
- ID video
- Định danh người xem tuỳ chọn (dùng cho analytics + watermark động)
- Timestamp hết hạn
- Danh sách origin được phép (whitelist domain của bạn)
- Metadata rate limit
Khi player yêu cầu khoá stream, server xác thực token, kiểm hết hạn, kiểm origin yêu cầu, rồi mới phát hành khoá AES-128 cho lô tiếp theo.
Token theo phiên qua REST API
Với nội dung trả phí, pattern khuyến nghị là:
- User đăng nhập vào ứng dụng của bạn.
- Ứng dụng xác thực user với DB của bạn.
- Ứng dụng gọi REST API của AVCaption:
POST /api/v1/embed-tokenvới{video_id, viewer_id, expires_in: 3600}. - AVCaption trả về một embed token dùng một lần, hiệu lực 1 giờ.
- Bạn render iframe với token đó.
- Token hết hạn; nếu user refresh, app sinh token mới.
Nghĩa là user copy URL iframe và chia sẻ chỉ nhận token hết hạn trong vòng một giờ — vô dụng cho phát tán lại.
Whitelist domain ở cấp token
Token có thể gắn với origin cụ thể. Token phát cho app.example.com sẽ không chạy nếu nhúng trên pirate-site.com. Trình duyệt gửi header Referer khi yêu cầu master playlist; AVCaption xác thực với whitelist và từ chối phát hành khoá.
So với cách signed URL
Một số nền tảng dùng signed URL (chuỗi query ký HMAC trên mỗi segment). AVCaption dùng opaque token ánh xạ tới metadata truy cập ở server. Đánh đổi:
- Signed URL — hoàn toàn stateless, dễ xác thực ở edge. Nhưng một khi URL đã ký, không thể thu hồi cho đến khi hết hạn.
- Opaque token (AVCaption) — cần tra cứu phía server cho mỗi phiên stream, nhưng cho phép thu hồi thời gian thực, analytics theo từng token và metadata truy cập phong phú hơn.
Với nội dung trả phí cần thu hồi, opaque token thắng. Xem mục glossary embed token vs signed URL để có so sánh sâu hơn.
Xoay token
Với nội dung giá trị rất cao, xoay token qua API theo lịch:
POST /api/v1/embed-token/rotate
{ "video_id": "abc123" }
Lệnh này vô hiệu hoá mọi token hiện có cho video đó và phát hành token mới. Hữu ích sau nghi vấn rò rỉ hoặc chargeback.
Khi nào dùng TTL nào
| TTL | Use case |
|---|---|
| 5 phút | Phát kiểu download một lần (sản phẩm số trả phí, link review một lần) |
| 1 giờ | Phiên đã xác thực chuẩn (portal member, course player) |
| 24 giờ | Content public miễn phí, video marketing |
| 30 ngày | Truy cập rental có hạn, content bonus tháng |
TTL ngắn hơn nâng bảo mật; TTL dài hơn giảm số API call mint token. Với hầu hết case content trả phí, 1 giờ là mặc định đúng.
Bắt đầu
Embed token phát tự động trên mọi upload, mọi gói. REST API sinh token theo phiên là feature Enterprise — wire vào auth check của bạn và bạn sẽ mint token theo phiên hết hạn cùng phiên. Mở tài khoản miễn phí, upload một video, và verify token mặc định 24 giờ hết hạn đúng như bạn nghĩ. Pattern phổ biến: token theo phiên cho khoá học online và video cho site membership.