最近更新时间:2023.12.11 20:01:37
首次发布时间:2022.08.30 14:30:07
在使用 WTN 发布音视频流和订阅音视频流时,无论通过服务端 API 接入还是通过 SDK 接入,都需要传入 Token 参数,完成鉴权。此 Token 来自你的应用服务端,在客户端发布时,根据 WTN AppID、发布 StreamID、时间戳等参数生成。
WTN 服务端在收到发布请求时,会校验请求中携带的 Token 信息,如果校验不成功,发布会失败。
注:在订阅时,你可以根据业务需要,选择是否需要鉴权。如果需要鉴权,生成 Token 的机制也和发布时一致。
鉴权全流程如下。
如图所示:
你需要自行实现步骤 1, 2, 3, 4 的代码逻辑。
生成算法:使用 Json Web Tokens,其中加密算法使用 HS256。
生成规则:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), YourAppKey )
字段参考:
{ "alg": "HS256", "typ": "JWT" }
version:版本号。String 类型。取值为 1.0
。
appID:WTN AppID。String 类型。你可以在控制台上获取此值。
streamID:AppID 下的媒体流 ID。String 类型。你可以自定义此值。仅支持数字、字母、下划线、减号,最长 64 个字符。
exp:过期时间。Number 类型。Unix 时间戳,精确到秒。
action:发布或订阅。String 类型。发布时,取值为 pub
,订阅时,取值为 sub
。
enableSubAuth:是否开启订阅鉴权。Boolean 类型。仅在 action = pub
时,包含此值。不开启订阅鉴权,取值为 false
;开启订阅鉴权,取值为 true
。
一般来说,在需要强权限控制时,可以选择开启订阅鉴权,如付费音视频课程等场景。
你可以参考示例代码,在应用服务端实现 Token 的生成。
以下是 GoLang 的实现参考:
import ( "github.com/golang-jwt/jwt/v4" "time" ) func main() { appKey := []byte("aaa") // 创建Token结构体 MapClaims就是payload相关字段 claims := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ "version": "1.0", "appID": "2xxxxx", "exp": time.Now().Unix() + 111, "action": "pub", // pub: 发布; sub: 订阅 "streamID": "111", "enableSubAuth": true, }) token, err := claims.SignedString(appKey) }