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

鉴权规则

最近更新时间2023.12.11 20:01:37

首次发布时间2022.08.30 14:30:07

在使用 WTN 发布音视频流和订阅音视频流时,无论通过服务端 API 接入还是通过 SDK 接入,都需要传入 Token 参数,完成鉴权。此 Token 来自你的应用服务端,在客户端发布时,根据 WTN AppID、发布 StreamID、时间戳等参数生成。
WTN 服务端在收到发布请求时,会校验请求中携带的 Token 信息,如果校验不成功,发布会失败。

注:在订阅时,你可以根据业务需要,选择是否需要鉴权。如果需要鉴权,生成 Token 的机制也和发布时一致。

鉴权全流程

鉴权全流程如下。

  1. 在发布(或订阅)前,向应用服务端申请 Token。
  2. 应用服务端生成 Token。
  3. 应用服务端将 Token 下发到客户端。
  4. 使用获取到的 Token 发起发布(或订阅)请求。
  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

一般来说,在需要强权限控制时,可以选择开启订阅鉴权,如付费音视频课程等场景。

示例代码

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