2025/03/07 11:12:04
实现 HTTP 安全认证
RTMP 网关服务 RESTful API 使用如下安全认证:
- HTTP 基本认证。易用,但安全性较弱。
- HTTP HMAC (Hash-based Message Authentication Code) 认证。安全性较高,推荐使用。
实现 HTTP 基本认证
本节介绍如何进行 HTTP 基本认证。
前提条件
已经从声网控制台获取客户 ID 和客户密钥,详见开通服务。
实现方法
参考 HTTP 基本认证实现。
实现 HTTP HMAC 认证
本节介绍如何实现 HTTP HMAC 认证。
前提条件
在生成认证字段过程中,你需要用到以下声网账号的信息:
- 声网项目的 App ID,详见获取 App ID。
- 声网控制台 RESTful API 中提供的客户 ID 及客户密钥,详见获取客户 ID 和密钥。
实现方法
在发送 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 安全认证后,你可以进行如下操作:
- 参考 API 文档集成 RTMP 网关服务。
- 参考接收 Webhook 事件开启消息通知服务,通过事件回调监听服务状态。
- 参考最佳实践检查你的集成步骤,保障服务可靠性。