我无法通过 Cloudfront 分发访问存储在我的 Amazon s3 存储桶中的视频。
我已将分发设置为需要签名 URL 或签名 cookie(由“self”用户生成)并根据 Amazon 网站上的教程配置所有内容(为“self”用户生成密钥对,使用 openssl 将其转换为 .der 格式, ETC)。
然后我按照本教程中的步骤操作:http: //docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CFPrivateDistJavaDevelopment.html
然后,我能够生成一个“罐头”签名的 URL 来访问内容并且它起作用了,我将 URL 粘贴到 chrome 中,它开始播放视频。这是代码:
String signedUrlCanned = CloudFrontService.signUrlCanned(
resourceURL,
certificateId,
derPrivateKey,
ServiceUtils.parseIso8601Date("2018-11-14T22:20:00.000Z")
);
但后来我决定创建一个自定义策略签名 URL,按照教程中的步骤,甚至使用与我用于罐装 URL 的完全相同的参数值,但它不起作用......这是代码:
String policy = CloudFrontService.buildPolicyForSignedUrl(
null,
ServiceUtils.parseIso8601Date("2018-11-14T22:20:00.000Z"),
null,
null
);
String signedUrl = CloudFrontService.signUrl(
resourceURL,
certificateId,
derPrivateKey,
policy
);
请记住,“resourceURL”、“certificateId”和“derPrivateKey”是用于罐装 URL 的相同参数,它们在这种情况下有效。自从我在调试时检查以来,参数一直保持不变,并且 3 个字符串(signedUrlCanned,policy,signedUrl)共享相同的范围(它们在同一方法内连续生成)并且之间没有其他代码可以更改参数的值。
以下是自定义策略签名 URL 的生成 URL:
您可以访问它并查看错误消息,它表示缺少 Key-Pair-Id,这显然不是真的,因为您可以看到它在那里。
有什么建议么?
编辑:我刚刚注意到该错误实际上是来自 Cloudfront 的 403“拒绝访问”。当我打开 chrome 控制台时,在“网络”选项卡下,我可以看到 2 个 GET,一个用于引发 403 错误的视频,另一个用于获取名为“favicon.ico”的东西,我不知道会是什么,并且那个抛出“Key-Pair-Id is missing”错误。我的一位同事可以访问该视频,但仍然出现 favicon.ico 错误,因此我认为该错误无关紧要,因为它不会干扰视频下载。