You need to enable JavaScript to run this app.
导航

慢直播旁路鉴权接入指南

最近更新时间2023.03.16 11:19:10

首次发布时间2023.03.16 11:19:10

说明

开通旁路鉴权服务后,当播放器向慢直播服务发起拉流请求后,慢直播服务会向第三方授权服务器地址发起异步鉴权。因此,需要按照如下要求,设计 获取鉴权结果 的接口。若要使用旁路鉴权,请联系技术人员支持。

旁路鉴权流程

例如,拉流 URL 为:http://{your_host}/{app_name}/{stream_name}/index.m3u8?token=xxxIxAmxTokenxxx

旁路鉴权调用流程如下:

alt

具体步骤说明如下:

  1. SMT 客户端请求 SMT 服务器生成带 token 的拉流地址。

  2. SMT 客户端请求的第一个 m3u8 请求在火山引擎慢直播直接放行,返回 m3u8 中 ts 的内容。

  3. 火山引擎慢直播将第一个 m3u8 请求通过请求接口传递 body 信息,到 SMT 服务器进行鉴权。

  4. 鉴权通过,火山引擎慢直播放行该用户请求,用户下一个 m3u8 请求继续返回 ts 内容。

  5. 鉴权未通过,火山引擎慢直播封禁该用户的拉流请求,用户下一个 m3u8 请求无法返回 ts 内容。

SMT 服务端鉴权接口

请求结构

参数/结构说明
请求地址"https://xxxxx.xxx.xxx/xxx/xxx/xxx",需由客户提供
请求方法POST
content-type 类型"application/json;charset=utf-8"

鉴权结果

  • 鉴权成功时,结果缓存10min(可自定义),鉴权 KEY 构成为 {$ClientIP$token$Streamname}

  • 鉴权失败时,结果缓存2min(可自定义),鉴权 KEY 仅为 {$token},携带相同 token 的请求将失败

请求参数

参数数据类型是否必须描述
DomainString拉流域名,来自于拉流 URL
AppStringApp 名称,来自于拉流 URL
StreamString流名称,来自于拉流 URL
TokenString拉流请求携带的 token 参数,防止模拟攻击
ClientIPString观众的 IP 地址
CdnIPString请求节点 IP
UAString观众拉流得来的 User-Agent header
RefererString观众拉流的来源 Referer header
LogIDString火山引擎生成的日志 ID,用于记录每次鉴权请求

响应参数

参数数据类型示例描述

data

String

pass

  • 当 data 参数为 "deny" 时,鉴权失败。客户端拉流响应403返回码
  • 当 data 参数为其他值时(一般设置为 "allow"),鉴权成功

请求示例(JSON 格式)

{
    "Domain": "domain",
    "App": "appname",
    "Stream":"streamname",
    "Token": "xxxIxAmxTokenxxx", // 拉流请求携带的token
    "LogID": "machine123T1234567",
    "UA": "Larf/xxxx",
    "Referer": "*.baicizhan.com",
    "CdnIP": "1.1.1.1",
    "ClientIP": "2.2.2.2"
}

响应示例(JSON 格式)

{
    "data": "deny",
    "other": "" // 其他参数, 火山引擎不关注
}

说明:用户需要定义什么情况应该拒绝拉流。如上述 data=deny 为拒绝,其他为通过。

关于 HLS 拒绝用户何时断流

在用户第一次请求时,会在鉴权服务器对用户是否可以拉流进行判断。断流时长取决于客户端播放器在请求 m3u8 文件时,其中包含多少个 ts 片及 ts 片时长。

举例:

  • 用户请求的第一个 m3u8 中,包含3个 ts 片,每个 ts 片3s,那么客户下一个 m3u8 请求,就在9s后。如果鉴权服务器通过,则用户端可以继续拉流播放;如果鉴权服务器拒绝,那么用户端在播放完第一个 m3u8 的9s后,就无法拉流播放。
  • 具体断流时长取决于 m3u8 中的 ts 数及 ts 时长。

支持配置的参数

参数示例
请求地址https://xxxxx.xxx.xxx/xxx/xxx/xxx

请求字段

{
    "Domain": "domain",
    "App": "appname",
    "Stream":"streamname",
    "Token": "xxxIxAmxTokenxxx", // 拉流请求携带的token
    "LogID": "machine123T1234567",
    "UA": "Larf/xxxx",
    "Referer": "*.baicizhan.com",
    "CdnIP": "1.1.1.1",
    "ClientIP": "2.2.2.2"
}

鉴权响应字段

{
    "data": "deny", //返回deny时,拒绝拉流,其他通过
    "other": "" // 其他参数, 火山引擎不关注
}
重试次数1次
重试超时时间3s
重试间隔1s
异常上报由客户提供异常上报接口和字段,非必填

补充说明:

  • 客户端携带参数除上述参数外,如果需要特定参数或 header,可以整理出需求文档,由火山引擎慢直播侧评估配置。

  • 鉴权服务器内部需要对请求 body 中的信息进行判断是否可以拉流,由客户侧进行判断。