Amazon Cloudfront签名的URL,缺少Key-Pair-Id

时间:2017-11-13 01:19:05

标签: java amazon-cloudfront jets3t

我无法通过Cloudfront发行版访问存储在我的Amazon s3存储桶中的视频。

我已经将分发设置为需要签名的URL或签名的cookie(由“自我”用户生成)并根据Amazon网站上的教程配置所有内容(为“self”用户生成密钥对,将其转换为.der使用openssl等格式。

然后我按照本教程中的步骤进行操作:http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CFPrivateDistJavaDevelopment.html

然后,我能够生成一个“罐装”签名网址来访问内容并且工作正常,我在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:

http://d1eanqhguto8v8.cloudfront.net/Fox/Dexter.mp4?Policy=eyJTdGF0ZW1lbnQiOiBbeyJSZXNvdXJjZSI6IioiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE1NDIyMzQwMDB9LCJJcEFkZHJlc3MiOnsiQVdTOlNvdXJjZUlwIjoiMC4wLjAuMC8wIn19fV19&Signature=D9sHG6i9GTZRUGwKZYhmz3xKOQsjEWHJPQTCNywzdX9r~F0yEb58ljBAqRyXbHNgmmGuRppS6s0VkiRcyYi8q~DRDoXLtnp~MBbnnBKbF0Qy3xcx59LF6mXC6lXSou7jqz68y~d0VOoLvnFQl~OR5eSTWRHUO7X42~k3qdIiRH~eqzBwAaV9XnbJcLQ2DEDiW13~sfZJXnRsO6hENSk-aGcWeoF80KoccJ2-nFt0ZpndIFI3V~YXRv~Z3VKKS2ek1MW8SE2xdsOdqXAMkJC2X2maQn~MBzczXBuqEO4qKt42FmZI496TckMWzG-pVs~w-EjIWE2EEOzuXxopav8q~Q__&Key-Pair-Id=APKAIS7ACQJH7KT4YWLQ

您可以访问它并查看错误消息,它表示缺少Key-Pair-Id,这显然不正确,因为您可以看到它在那里。

有什么建议吗?

编辑:我刚注意到该错误实际上是来自Cloudfront的403“拒绝访问”。当我打开chrome控制台时,在网络选项卡下我可以看到2个GET,一个用于投射403错误的视频,另一个用于尝试获取名为“favicon.ico”的内容,我不知道它可能是什么,并且那个抛出“Key-Pair-Id is missing”错误。我的一个同事可以访问该视频并仍然得到favicon.ico错误,所以我猜这个错误并不重要,因为它不会干扰视频下载。

0 个答案:

没有答案