如何在不提供凭据的情况下在浏览器中使用 Kinesis Video Stream WebRTC SDK?



我想使用 kinesis video streams webrtc javascript sdk 从网页生成视频流。 SDK 自述文件说我需要提供accessKeyIdsecrectAccessKey

signalingClient = new KVSWebRTC.SignalingClient({
channelARN,
channelEndpoint: endpointsByProtocol.WSS,
clientId,
role: KVSWebRTC.Role.VIEWER,
region,
credentials: {
accessKeyId,
secretAccessKey,
},
systemClockOffset: kinesisVideoClient.config.systemClockOffset,
});

有没有办法使它更安全,并避免在javascript代码中提供秘密访问密钥? 这是否意味着任何查看我的网页源代码的人都可以从网页中获取这些凭据并使用它们来访问信令通道? 我可以使用 amplify-js 身份验证类将信令客户端与经过身份验证的用户一起使用吗?

事实证明,我可以在后端使用凭据,并使用类SigV4RequestSigner向客户端发送预签名链接。 无需在客户端提供凭据。

在文档中找到它:

这是一个有用的类,可在 NodeJS 后端中用于对请求进行签名并将其发送回客户端,以便客户端不需要具有 AWS 凭证。

创建信令客户端时,您可以指定凭据或返回Promise<string>的请求签名者,请参阅:

https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/README.md#class-signalingclient

credentials {object} Must be provided unless a requestSigner is provided.

请注意,当不在浏览器中使用凭据时,您还需要在服务器端运行与KinesisVideoSignalingChannels相关的代码,因为此类不支持请求签名者。

对于 Kinesis,其中一种可能性是在 NodeJS 后端实现一个用于对 URL 进行签名的函数。

const endpointsByProtocol = getSignalingChannelEndpointResponse.ResourceEndpointList.reduce((endpoints, endpoint) => {
endpoints[endpoint.Protocol] = endpoint.ResourceEndpoint;
return endpoints;
}, {});
console.log('[VIEWER] Endpoints: ', endpointsByProtocol);
const region = "us-west-2";
const credentials = {
accessKeyId: "XAXAXAXAXAX",
secretAccessKey: "SECRETSECRET"
};
const queryParams = {
'X-Amz-ChannelARN': channelARN,
'X-Amz-ClientId': formValues.clientId
}
const signer = new SigV4RequestSigner(region, credentials);
const url = await signer.getSignedURL(endpointsByProtocol.WSS, queryParams);
console.log(url);

最新更新