文档目录搜索⌘K

文档安全

签名链接

由你的服务器决定谁可以观看,并签发带有效期的视频流链接。dodocast 只校验签名。

本页内容

套餐

签名链接用于直接视频流链接,适用于 Pro 和 Business 套餐。

签名密钥

  1. 进入 Settings → Signing keys → Create key。
  2. 保存密钥:它只在创建时显示一次。请像对待数据库密码一样保管它,切勿发送到浏览器——只在服务器端签名。
  3. 密钥有一个 ID sk_…,它会写入令牌头部。
签名密钥签名密钥
Settings → Signing keys

被撤销的密钥会在一分钟内失效,用它签名的链接也随之失效。

令牌

使用 HS256 签名的标准 JWT:

json
header:  { "alg": "HS256", "typ": "JWT", "kid": "sk_your_key_id" }
payload: { "code": "abc123XYZ0", "iat": 1791676800, "exp": 1791678600 }
  • code 是视频、播放列表、直播或频道的代码。为某一项内容签发的令牌无法打开其他内容。
  • iat 和 exp 为必填项;有效期最长 24 小时。
  • 你只能为自己的内容签名。
  • 签名时将密钥作为字符串使用,与控制台提供给你的完全一致。
js
// Node.js,jsonwebtoken 库
import jwt from 'jsonwebtoken'

const token = jwt.sign({ code: 'abc123XYZ0' }, process.env.DODOCAST_SECRET, {
  algorithm: 'HS256', keyid: 'sk_your_key_id', expiresIn: '30m',
})
const url = `https://stream.dodocast.com/s/${token}/hls/mp4/abc123XYZ0/master.m3u8`
python
# Python,PyJWT 库
import time, jwt

now = int(time.time())
token = jwt.encode({"code": "abc123XYZ0", "iat": now, "exp": now + 1800},
                   SECRET, algorithm="HS256", headers={"kid": "sk_your_key_id"})
url = f"https://stream.dodocast.com/s/{token}/hls/mp4/abc123XYZ0/master.m3u8"

Player SDK 已内置此功能:@dodocast/player/server 中的 signToken()、signedStreamUrl()、signedPlaylistItemUrl()。

令牌放在哪里

令牌放在链接路径中。播放器会自动使用相同前缀请求各码率版本、分片和加密密钥。

内容路径
视频/s/{jwt}/hls/mp4/{code}/master.m3u8
直播/s/{jwt}/live/mp4/{code}/index.m3u8
频道/s/{jwt}/ch/mp4/{code}/index.m3u8
课程课时(令牌对应播放列表代码)/public/pl/{code}/item/{itemCode}?t={jwt}
如何使用密钥如何使用密钥
控制台中直接提供示例代码和 URL

链接返回 403 时

  • 你为他人的内容签了名——密钥只对你自己的内容有效;
  • exp 减去 iat 超过 24 小时;
  • 令牌中包含 purpose 字段——不应包含;
  • 密钥已被撤销(或已重新创建——请检查 kid);
  • 你服务器的时钟快了 5 分钟以上。

更新于:

    ↑ ↓ 选择,Enter 打开,Esc 关闭