实现 HTTP 安全认证

更新时间不可用

了解如何在 RTMP 网关中 HTTP 鉴权,包括适用场景、配置步骤、实现要点和注意事项。

RTMP 网关服务 RESTful API 使用如下安全认证:本节介绍如何进行 HTTP 基本认证。

TMP 网关服务 RESTful API 支持以下鉴权方式:

  • HTTP 基本认证。易用,但安全性较弱。
  • HTTP HMAC(Hash-based Message Authentication Code)鉴权。安全性较高,推荐使用。

实现 HTTP 基本认证

前提条件

已经从声网控制台获取客户 ID 和客户密钥,详见开通服务。

实现方法

参考 HTTP 基本认证实现。

实现 HTTP HMAC 鉴权

本节介绍如何实现 HTTP HMAC 鉴权。

前提条件

在生成认证字段过程中,你需要用到以下声网账号的信息:

实现方法

在发送 HTTP 请求时,你需要通过 HMAC-SHA256 算法生成一个签名,并在请求头部的 Authorization 字段传入签名及相关信息。

下面的 Node.js 代码演示如何生成 Authorization 字段的值:

JavaScript
const crypto = require('crypto');
const http = require('http');
const host = "api.sd-rtn.com"

// 你的声网项目的 App ID
appid = ""
// 声网控制台 RESTful API 中获取的客户 ID
customer_username = ""
// 声网控制台 RESTful API 中获取的客户密钥
customer_secret = ""
// 请求包体
data = ""

function hashData(data) {
    const hash = crypto.createHash('sha256');
    hash.update(data);
    return hash.digest('base64');
}
function signData(data) {
    const hmac = crypto.createHmac('sha256', customer_secret);
    hmac.update(data);
    return hmac.digest('base64');
}

date = (new Date()).toUTCString();
reqpath = `/cn/v1/projects/${appid}/rtls/ingress/appconfig`;
reqline = `GET ${reqpath} HTTP/1.1`;
// 计算 Body 的 SHA-256 的哈希值
bodySign = hashData(data);
digest = `SHA-256=${bodySign}`;
// 生成签名
signingStr = `host: ${host}\ndate: ${date}\n${reqline}\ndigest: ${digest}`;
sign = signData(signingStr);

auth = `hmac username="${customer_username}", `
auth += `algorithm="hmac-sha256", `
auth += `headers="host date request-line digest", `
auth += `signature="${sign}"`;

console.log(`Authorization: ${auth}`);

下一步

开通服务、实现 HTTP 鉴权后,你可以进行如下操作:

  1. 参考 API 文档集成 RTMP 网关服务。
  2. 参考接收 Webhook 事件开启消息通知服务,通过事件回调监听服务状态。
  3. 参考最佳实践检查你的集成步骤,保障服务可靠性。