Signed URL và Embed Token — Kiểm Soát Truy Cập Video Theo Phiên

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à:

  1. User đăng nhập vào ứng dụng của bạn.
  2. Ứng dụng xác thực user với DB của bạn.
  3. Ứng dụng gọi REST API của AVCaption: POST /api/v1/embed-token với {video_id, viewer_id, expires_in: 3600}.
  4. AVCaption trả về một embed token dùng một lần, hiệu lực 1 giờ.
  5. Bạn render iframe với token đó.
  6. 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 onlinevideo cho site membership.

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

Signed URL cho video là gì? +
Signed URL là link phát video có chữ ký mã hoá trong query string chứng minh URL được phát từ origin server. Edge CDN hoặc origin kiểm chữ ký trước khi phục vụ segment; URL bị thay đổi hoặc hết hạn bị từ chối. Signed URL cho phép nền tảng trả phí kiểm soát truy cập video mà không cần lưu trạng thái theo từng user ở edge.
Embed token kéo dài bao lâu? +
Mặc định 24 giờ. Bạn có thể cấu hình từ 5 phút đến 30 ngày cho mỗi video, hoặc sinh token mới mỗi phiên qua REST API. Với nội dung giá trị cao, token ngắn hạn sinh theo từng phiên đã xác thực là pattern khuyến nghị.
Tôi có thể thu hồi token giữa lúc đang phát không? +
Có. Thu hồi qua dashboard hoặc API. Yêu cầu khoá tiếp theo từ phiên đó sẽ thất bại — playback dừng trong 60 giây (ranh giới lô tiếp theo).
Signed URL hay embed token — tôi nên dùng cái nào? +
Embed token cho nội dung trả phí cần thu hồi; signed URL cho xác thực stateless ở edge. AVCaption dùng opaque embed token gắn metadata truy cập ở server, nên bạn có thể thu hồi token rò rỉ ngay lập tức. Signed URL thuần stateless nhưng không thể thu hồi trước hạn. Xem so sánh embed token vs signed URL để hiểu đầy đủ đánh đổi.
← content.back_to_index