AWS Cloudfront返回Missing Key-Pair-Id查询参数或cookie值

时间:2017-09-28 12:57:09

标签: c# amazon-web-services amazon-cloudfront amazon-signed-cookie

我有返回Cloud Front Signed Cookie值的代码。

CookiesForCustomPolicy signedCookiesUrl = AmazonCloudFrontCookieSigner.GetCookiesForCustomPolicy("https://example.cloudfront.net/movies/nature.mp4", new StreamReader(File.OpenRead(Path.Combine(AppContext.BaseDirectory, "pk-2.pem"))),"APKEXAMPLEKEYID", DateTime.Now.AddDays(10), DateTime.Now, null);

我使用返回的值来请求对象,但是返回

<Error>
<Code>MissingKey</Code>
<Message>
Missing Key-Pair-Id query parameter or cookie value
</Message>
</Error>. 

我通过PostMan工具对此进行测试,将标题和直接请求放入Chrome浏览器并仍然出现相同的错误。

我使用了正确的Cloudfront密钥对并更正了资源网址。我的对象是私有的,cloudfront可以访问它。还有什么我需要努力让这个工作吗?

3 个答案:

答案 0 :(得分:1)

当我们使用PUBLIC_KEY和PRIVATE_KEY时,我们会丢失Key-Pair-Id。我们应该使用访问密钥ID而不是PUBLIC_KEY,这样它将可以正常工作。

enter image description here

答案 1 :(得分:0)

  

添加标头密钥对

这些不是原始标题,而是Cookie。虽然我不使用邮差,但听起来这是你的问题:

根据你所说的,你不会像这样添加它们:

[CloudFront-Key-Pair-Id, APKEXAMPLEQQ]

相反它看起来应该更像这样:

[Cookie, CloudFront-Key-Pair-Id=APKEXAMPLEQQ]

答案 2 :(得分:0)

以下是C#中签名网址的示例。

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CreateSignatureInCSharp.html

当您返回签名密钥时,您可以使用查询字符串参数或Cookie返回。

您可以通过两种方式将Cookie返回到API网关:执行任何集成并按原样返回标头。

如果您执行任何其他方法,则需要返回json数据并将json数据映射到API网关中的标头。

http://docs.aws.amazon.com/apigateway/latest/developerguide/request-response-data-mappings.html#mapping-response-parameters

希望它有所帮助。