我们一直在寻找方案来保护存储在GCS中并通过Fastly的CDN服务分发的编码视频。
所以,在这篇文章之后-https://docs.fastly.com/guides/tutorials/enabling-url-token-validation
我们找到了一个有趣的库here,用于在VCL子例程中创建JWT令牌。
现在,当我们尝试访问域-http://cdn.urtutors.com.storage.googleapis.com.global.prod.fastly.net/generate
它会生成JWT令牌,并在此处成功验证--http://cdn.urtutors.com.storage.googleapis.com.global.prod.fastly.net/validate
但是,我们希望将JWT令牌生成移至我们的后端服务,为此,我们希望在服务器端生成此JWT令牌,只需在VCL中使用此处的验证部分即可。 现在,我不太确定为什么在这里使用“ base64url_nopad”以及在node.js中有哪些替代方案,但是我想一个更好的选择是只使用类似-https://www.npmjs.com/package/jsonwebtoken
最终生成jwt令牌,但如何在此处使用VCL中的摘要对象验证相同的结果-
set req.http.X-JWT-Header = re.group.1;
set req.http.X-JWT-Payload = re.group.2;
set req.http.X-JWT-Signature = digest.base64url_nopad_decode(re.group.3);
set req.http.X-JWT-Valid-Signature = digest.hmac_sha256("SupSecretStr",
req.http.X-JWT-Header "." req.http.X-JWT-Payload);
// Validate signature
if(digest.secure_is_equal(req.http.X-JWT-Signature, req.http.X-JWT-Valid-Signature)) {
// Decode payload
set req.http.X-JWT-Payload = digest.base64url_nopad_decode(req.http.X-JWT-Payload);
set req.http.X-JWT-Expires = regsub(req.http.X-JWT-Payload, {"^.*?"exp"\s*?:\s*?([0-9]+).*?$"}, "\1");
// Validate expiration
if (time.is_after(now, std.integer2time(std.atoi(req.http.X-JWT-Expires)))) {
// Unauthorized
error 401 "Unauthorized";
}
// OK
error 902;
}