From 5474aef8923f44d5c0e8b580837743ed691046d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=B3=E9=A9=B9=20=E4=B8=87?= Date: Mon, 13 Nov 2023 18:59:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AE=A2=E6=88=B7=E7=AB=AF?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ClientAuth.md | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 ClientAuth.md diff --git a/ClientAuth.md b/ClientAuth.md new file mode 100644 index 0000000..f695260 --- /dev/null +++ b/ClientAuth.md @@ -0,0 +1,58 @@ + * [主动安全附件服务](#主动安全附件服务) + * [接入流程](#接入流程) + * [附件上传完成通知](#附件上传完成通知) + * [kafka通知](#kafka通知) + * [阿里云OSS通知](#阿里云OSS通知) + +# 客户端认证 +RTVS的客户端和服务端默认情况下并没有做验证,只要知道服务端的地址和端口后即可请求。如果需要拦截掉未授权的请求,可以有以下几种方式。 + + +## Ctag +RTVS的JSSDK请求时,可以传入一个Ctag,这个Ctag传递给后台后,会一路传给网关接口地址,这就可以在网关接口地址做验证,未通过验证的可以直接应答失败即可。 + +但此方法有一个缺陷,即实时视频如果复用时,不会调用网关接口,这时候是直接通过的。 + + +## 一次性Token认证 +启用ClientAuth后,RTVS支持一次性Token认证,tokenType 1。 + +在后端接口中支持申请一次性Token,默认5分钟内有效,使用后失效。此Token可通过JSSDK请求时传入,验证通过才放行。 + +启用ClientAuth配置 +``` bash +export RTVS_CLIENT_AUTH=true +``` + +JSSDK通过config传入下面参数 +``` js +tokenType: 1, +token: "一次性Token", +``` + +## RSA加密时间戳认证 +启用ClientAuth后,RTVS支持RSA加密时间戳认证,tokenType 2。 + +需要一对RSA证书,加密过程如下: +``` +//加密过程 +//1.取当前UTC时间戳(秒) 转换为二进制数据(8字节 无符号 高位在前) +//2.用公钥加密 +//3.加密结果用BASE64编码 +``` +注:私钥和公钥都不能泄露,所以不要用域名的证书。 + + +配置过程: +启用ClientAuth配置和配置RSA私钥证书 +``` bash +export RTVS_CLIENT_AUTH=true +export RTVS_CARSA_PEMKEY_PATH="RSA私钥证书路径" +``` + + +JSSDK通过config传入下面参数 +``` js +tokenType: 2, +token: "BASE64编码的时间戳加密结果", +```