Generate License Acquisition URL

更新时间:2024-01-02 10:46:35

内容

概述

要播放从我们的 CDN 检索到的 DRM 加密流,您必须首先获得许可证。许可证包含解密内容所需的加密密钥,以及指定内容使用方式的权利和其他属性。例如,许可证可能包含有关何时到期或流可以播放多少次的信息。这些属性都可以在许可证中与受保护的流内容分开配置。

要使用Media Acceleration Live BroadcastDRM,必须遵循某些准则来生成许可证获取 URL。此 URL 用于获取允许解密您的流以进行播放的许可证。本文提供有关如何生成许可证获取 URL 的指南。

这些是生成许可证获取 URL 时要遵循的步骤:

  1. 获取允许爱迪德访问的访问令牌。
  2. 使用访问令牌创建用于签署会话令牌的会话签名密钥。
  3. 使用 JSON Web 令牌 (JWT) 创建会话令牌。
  4. 添加会话令牌和内容 ID 作为 URL 参数以创建许可证获取 URL。

第 1 步:获取允许爱迪德访问的访问令牌

访问令牌允许您访问爱迪德并注册您自己的签名密钥,它将用于在以下步骤中生成您的许可证获取 URL 令牌。

运行以下 curl 脚本以检索访问令牌:

curl -X POST \
   'http://ca.haplat.net/wslive/drm/getToken.action?sign=query_token&time=current_timestamp&n=accountId' \
   -H 'Authorization: Bearer {access_token}' \
   -H 'Host: ca.haplat.net'

请确保为此请求提供所需的请求标头和参数。

参数/请求头 必需 描述
Host 是的 固定值: ca.haplat.net
n 是的 您的帐户名称。
r 是的 唯一的随机字符串,最大长度为13,建议使用时间戳。
k 是的 MD5 认证值。
k = md5(r + apikey) ,即获取’k’的值,将字符串apikey追加到字符串’r’的末尾,然后对得到的字符串进行MD5计算。
注:apikey可向客服索取。
例如,
1。请求并获取apikey=012f37a3f2952
2.随机生成字符串r=1409284800
3.将 apikey 附加到“r”的末尾,生成字符串“1409284800012f37a3f2952”
4。计算新字符串的MD5哈希得到’k’的值,即’b9fed80be752551834eec3e52fa94115’

请注意,要使用此 API,您必须先联系客户服务启用它并为您提供访问令牌。

提交成功请求后,API 将响应所需的详细信息。响应正文可能包含各种字段,包括“ accessToken ”字段,该字段包含继续执行后续步骤所需的访问令牌。

{
    "msg": {
        "accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IlJEUkROVEl3TTBSRU1USXlPVVZCTURKRU56RkNNamRFUVVRM1JFUXlSRFE1T1VRMU1ESXlNUSJ9.eyJodHRwOi8vaXJkZXRvLmNvbS9yb2xlcyI6W3sic2VydmljZSI6IlJpZ2h0c05HIiwiYWNjb",
        "expiresIn": 36000,
        "tokenType": "Bearer"
    },
    "code": 200,
    "callTime": "2023-04-20 15:42:53"
}

请确保您安全地存储此令牌,因为它授予访问权限以生成您的许可证获取 URL。

第 2 步:创建会话签名密钥以签署您的许可证获取 URL 令牌

典型的许可证获取 URL 可能具有以下格式:

https://wangsuusa.live.ott.irdeto.com/licenseServer/widevine/v1/wangsuusa/license?ls_session=eyJhbGciOiJIUzI1NiIs****&contentId=eae3246f8bb4dba67b6328e2b9656a5b

该 URL 包含一个名为“ls_session”的参数,它是负责验证客户端授权以请求许可证的会话令牌。会话令牌生成为需要“会话签名密钥”的签名 JWT 格式。因此,要创建会话令牌,您必须首先生成会话签名密钥并将其注册到爱迪德控制中。

以下是创建会话签名密钥并将其注册到爱迪德控制中的示例请求:

curl -X PUT \
   'https://wangsuusa.live.ott.irdeto.com/ls/v1.1/wangsuusa/sessionSigningKeys/{sessionSigningKeyId}' \
   -H 'Authorization: Bearer {access_token}' \
   -H 'Content-Type: application/json' \
   -d '{
    "id": "testkey0412",
    "displayName": "Example Session Signing Key",
    "keyType": "sha256",
    "keyData": "W1HCQPNg7PXlo4WZsGM5h5oZ3M2CaAkUMZ6AEzdLeaY=",
    "validityStart": "2023-03-01T00:00:00.000Z",
    "validityEnd": "2024-03-01T00:00:00.000Z"
}'

要发出特定请求,您通常需要包括以下字段和参数: 输入以下字段和参数:

姓名 类型 必需的 描述
sessionSigningKeyId String(path) 是的 会话签名密钥的 ID,字符串长度不超过 255 个字符。
重要提示:我们强烈建议使用您的CDNetworks 帐户作为 sessionSigningKeyId,以防止任何 ID 冲突或失败。
Authorization Bearer Authentication (header) 是的 step1中获取的访问令牌。
Content-Type String (header) 是的 application/json

并确保在请求正文中包含相关字段:

姓名 类型 必需的 描述
id string (255) 是的 会话签名密钥的唯一标识符。
请注意,该id应与请求路径中的sessionSigningKeyId相同
displayName string (255) 键的显示名称。如果未指定,密钥将显示为“默认”。
keyType string 是的 支持以下密钥类型:
- sha256 : HS256 算法
- rsa2048 : RSA-2048 公钥
- rsa4096 : RSA-4096 公钥
keyData string 是的 密钥数据。
- keyType sha256 :经过 base64 编码的 32 字节密钥,用于使用 HS256 算法对会话令牌进行签名。
- keyType rsa2048rsa4096 :用于对会话令牌进行签名的密钥RS256 或 RS512 算法。
validityStart datetime(ISO8601) 是的 指示密钥何时生效的时间戳。
例如:2023-01-01T00:00:00Z
validityEnd datetime(ISO8601) 是的 指示密钥何时不再有效的时间戳。
例如:2023-12-31T23:59:59Z

在您的请求发送成功后,您的会话签名密钥将被接受并在 Irdeo Control 中注册,用于签名和验证您的会话令牌。

第 3 步:使用 JSON Web 令牌 (JWT) 创建会话令牌

如步骤 2 中所述,为了验证身份,您必须包含一个“会话令牌”作为许可证获取 URL 的一部分。为成功通过身份验证的客户端授予对许可证获取的访问权限,但不匹配的会话令牌将阻止对许可证的访问。
在 Irdeto Control 中,会话令牌被接受为签名的 JWT (RFC 7519),它由三部分组成:标头有效负载签名

  • Header :由3部分组成:
    – “alg”:用于签名的算法。
    – “typ”:令牌类型。这应该始终设置为“JWT”。
    – “kid”:在步骤 2 中创建的会话签名密钥的 ID。
  • Payload :包含具有以下字段的 JSON 对象的播放负载:
    – “jti”:一个唯一的 JWT ID,用于识别会话令牌并防止与其他令牌发生冲突。
    – “sub”:用户 ID。这应该始终设置为“_authenticated”。
    – “aid”:账户ID。这应该始终设置为“wangsuusa”。
    – “iss”:发行人。这应该始终设置为“IrdetoControlHandsOn”。
    – “ent”:一组用户权利,包括“epid”权利策略 ID 和您的 CDNetworks 帐户“bid”。
  • Signature :由加密算法生成的字符串,用于验证 JSON 负载的完整性。计算如下
base64UrlEncode( HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload), your signing key) )

关于“权利政策”
权利政策规定了授予内容访问权限的条款和条件,例如:
– 权利何时何地有效
– 消费者的客户端设备/播放器应用程序必须满足哪些安全要求
– 消费者允许多少个并发流
虽然一个权利只能有一个权利策略,但同一个权利策略可以强加于多个权利。

以下是会话令牌的示例值:
Header

{
  "alg": "HS256",
  "typ": "JWT",
  "kid": "testkey0412"
}

Payload

{
  "jti": "VbY_HmmLmyut8geag52f11KiCnZ8ZzFcYtiB3H3jIbw=",
  "sub": "_authenticated",
  "aid": "wangsuusa",
  "ent": [
    {
      "epid": "anonymous-entitlement-policy",
      "bid": "linxf"
    }
  ],
  "iat": 1681296770,
  "exp": 1682851970,
  "iss": "IrdetoControlHandsOn"
}

有许多在线 JWT 生成器可用于轻松创建 JWT 令牌。下面的屏幕截图演示了如何使用可从https://jwt.io/访问的在线工具生成会话令牌。
要使用它,请确保:

  • 选择所需的签名算法。
  • 以 JSON 格式提供标头和有效负载。
  • 在指定字段中输入您的会话签名密钥,然后选中“秘密 base64 编码”复选框。

在右侧输入标头和负载后,您将在左侧框中收到生成的 JWT 令牌:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3RrZXkwNDEyIn0.eyJqdGkiOiJWYllfSG1tTG15dXQ4Z2VhZzUyZjExS2lDblo4WnpGY1l0aUIzSDNqSWJ3PSIsInN1YiI6Il9hdXRoZW50aWNhdGVkIiwiYWlkIjoid2FuZ3N1dXNhIiwiZW50IjpbeyJlcGlkIjoiYW5vbnltb3VzLWVudGl0bGVtZW50LXBvbGljeSIsImJpZCI6ImxpbnhmIn1dLCJpYXQiOjE2ODEyOTY3NzAsImV4cCI6MTY4Mjg1MTk3MCwiaXNzIjoiSXJkZXRvQ29udHJvbEhhbmRzT24ifQ.aXg6alLfnl7gm3ye3XBQTPQl5M0Mc4IsID_IIkyYGhg

第 4 步:在许可证获取 URL 中包含会话令牌和内容 ID

在前面的步骤中生成会话令牌后,最后一步是创建许可证获取 URL。许可证获取 URL 的格式将取决于所使用的 DRM 系统。以下是 PlayReady、FairPlay Streaming 和 Widevine 的标准 URL:

网址
许可证获取 URL 将根据使用的 DRM 系统而有所不同:

contentId
参数“contentId”表示您的内容ID,它是通过您的域名、应用程序名称和流名称的MD5 值计算得出的。例如,如果您的流位于https://drmtest-pull.cdnetworks.com/live/drmtest.mpd ,则相应的内容 ID 为:

MD5(drmtest-pull.cdnetworks.com/live/drmtest)=d8c1d35c93df672a61c735487a145064

ls_session
“ls_session”是第 3 步中的会话令牌。

获得 URL、contentId 和 ls_session 后,将它们连接起来形成许可证获取 URL。
例如,这是 Widevine 的许可证获取 URL:

https://wangsuusa.live.ott.irdeto.com/licenseServer/widevine/v1/wangsuusa/license?contentId=d8c1d35c93df672a61c735487a145064?ls_session=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3RrZXkwNDEyIn0.eyJqdGkiOiJWYllfSG1tTG15dXQ4Z2VhZzUyZjExS2lDblo4WnpGY1l0aUIzSDNqSWJ3PSIsInN1YiI6Il9hdXRoZW50aWNhdGVkIiwiYWlkIjoid2FuZ3N1dXNhIiwiZW50IjpbeyJlcGlkIjoiYW5vbnltb3VzLWVudGl0bGVtZW50LXBvbGljeSIsImJpZCI6ImxpbnhmIn1dLCJpYXQiOjE2ODEyOTY3NzAsImV4cCI6MTY4Mjg1MTk3MCwiaXNzIjoiSXJkZXRvQ29udHJvbEhhbmRzT24ifQ.aXg6alLfnl7gm3ye3XBQTPQl5M0Mc4IsID_IIkyYGhg

测试加密回放

Widevine & PlayReady 播放测试

要测试 Widevine 和 PlayReady 的播放,您需要一个测试播放器、一个 MPEG-DASH 播放 URL 和一个许可证获取 URL。这里我们使用Bitmovin演示播放器进行测试: https://bitmovin.com/demos/stream-test

在播放过程中,加密内容加载到播放器后会自动生成许可证请求。只有在播放器成功获得所需的许可证后,播放才会开始。

我们强烈建议在 Chrome 上测试 Widevine,在 Microsoft Edge 上测试 PlayReady。

本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!