【发布时间】:2021-05-11 17:55:03
【问题描述】:
我们正在开发一个在线课程网站。
课程有音频和文字(没有视频)。
音频文件存储在 Amazon S3 上并通过 AWS CloudFront 交付。
每当用户想要播放课程音频文件时,
网站(服务器端)向 CloudFront 发送请求以获取音频文件。
每个请求还包括一个签名和一个随机数。
我们使用 PHP hash_hmac 生成签名如下:
$signature = hash_hmac('sha256', $random_number, $secret, true);
双方(网站和 CloudFront 功能)都有硬编码的密钥。
CloudFront 收到请求后,
“CloudFront 功能”(新的 AWS 功能)正在验证令牌。
CloudFront 函数只能使用 JavaScript(不是 NodeJS 也不是 Python)。
https://aws.amazon.com/blogs/aws/introducing-cloudfront-functions-run-your-code-at-the-edge-with-low-latency-at-any-scale/
我们希望 CloudFront 函数使用 JavaScript 简单地运行 hash_hmac()
然后比较签名,但我们找不到等效的 JS 函数。
我们在 StackOverflow 上进行了广泛检查,但找不到等效的 JS 函数。
我们的发现:
Google 的 Crypto-JS 库已弃用。
由于我们使用纯 JavaScript,因此无法使用 NodeJS Crypto 模块。
有人可以分享关于如何在 JavaScript 上运行 hash_hmac 的链接或代码 sn-p 吗?
【问题讨论】:
-
这能回答你的问题吗? How can I hash a string with SHA256 in JS?
-
@biesior 我不确定这是否符合“客户端”的要求,因为脚本是在 CloudFront 边缘位置上执行的,而不是在请求浏览器中。
标签: javascript php amazon-web-services