You need to enable JavaScript to run this app.
导航
鉴权规则
最近更新时间:2024.05.16 14:24:26首次发布时间:2022.08.30 14:30:07

在调用 WTN 服务端 API 时,你需要传入 Token,完成鉴权。此 Token 来自你的应用服务端,根据 WTN AppID、发布 StreamID、时间戳等参数生成。

注:在订阅媒体流时,你可以根据业务需要,选择是否需要鉴权。WTN 建议在需要强权限控制时,选择开启订阅鉴权,如付费音视频课程等场景。

鉴权全流程

鉴权全流程如下。

  1. 在调用接口前,向应用服务端申请 Token。
  2. 应用服务端生成 Token。
  3. 应用服务端将 Token 下发到客户端。
  4. 使用获取到的 Token 发起 API 请求,发布媒体流 / 订阅媒体流 / 获取 TURN 信息。
  5. WTN 服务端验证 Token。
  6. 收到请求返回信息,判断请求结果(成功 / 失败)。

如图所示:
alt

你需要自行实现步骤 1, 2, 3, 4 的代码逻辑。

生成 Token

生成规则

生成算法:使用 Json Web Tokens,其中加密算法使用 HS256。
生成规则:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
   YourAppKey
)

字段参考:

  • Header:固定值。
{
  "alg": "HS256",
  "typ": "JWT"
}
  • payload:
    • 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

调用接口获取 TURN 服务信息时,payload 仅需要传入 versionappID,和 exp 字段。

示例代码

你可以参考示例代码,在应用服务端实现 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)
}