node.js - AWS Cloufront:使用签名 Cookie 返回拒绝访问
问题描述
我可以使用带有自定义域的云端签名 url 访问我的原始对象。当我尝试使用云端签名的 cookie 时出现问题,然后我从云端收到 403 Access Denied 响应。
<Error>
<Code>AccessDenied</Code>
<Message>Access denied</Message>
</Error>
我使用完全相同:
- 桶
- OAI 凭证
- 密钥对 ID
- 私钥
- 政策
以及我用于签名 url 的 cloudfront 和 origin 配置。
下面是我使用的 nodejs 代码。我真的不知道怎么了。
任何帮助将不胜感激!
谢谢!
var moment = require('moment');
var AWS = require('aws-sdk');
var keyPairId = 'APKAIPZ5BRDMEXAMPLE';
var privateKey = '-----BEGIN RSA PRIVATE KEY-----\n' +
'MIIEowIBAAKCAQEAsL+Tz/soZcDQLXcgJE89h5RHfZY+ddNIVI/3T0OvjOOFVRLp\n' +
'0gN+06cwXWsvlmeEbnh5XdklA38H4p3wt5mxqip4YmuvbW6i+8UALHxPW0LTmiz0\n' +
's4J6HB0eXhm3cbFV60i1DNat+W2q5miqlXqxKSdg+UbUGlFA5CbR\n' +
'-----END RSA PRIVATE KEY-----';
var signer = new AWS.CloudFront.Signer(keyPairId, privateKey);
var expireTime = moment().add(3600, 'sec').unix();
exports.handler = (event, context, callback) => {
var domain = 'mydomain.com';
var resource = 'https://cdn.mydomain.com/*';
var attributes = '; domain=' + domain + '; path=/; secure; httpOnly'
var options = {policy : '{"Statement":[{"Resource":"' + resource +
'","Condition":{"DateLessThan":{"AWS:EpochTime":' + expireTime +
'}}}]}'};
signer.getSignedCookie(options, function(err, data) {
if (err) {
//do somehing
} else {
context.done(null, {
'Set-Cookie': 'CloudFront-Policy=' + data["CloudFront-Policy"] + attributes,
'SEt-Cookie': 'CloudFront-Signature=' + data["CloudFront-Signature"] + attributes,
'SeT-Cookie': 'CloudFront-Key-Pair-Id=' + data["CloudFront-Key-Pair-Id"] + attributes
});
}
});
};
解决方案
而不是使用 moment() 使用 Math() 函数来计算你的过期时间,它会成功的!
var expireTime = Math.round((new Date()).getTime() / 1000) + 3600;
推荐阅读
- python - 在 python 模块中定义一个函数,使函数名等于一个字符串变量
- ruby-on-rails - 类方法规范 - 保留顺序并返回 ActiveRecord 关系
- google-cloud-platform - Google Datastore(Datasore 模式下的 Firebase)是否有限制新帐户的写入吞吐量?
- excel - 如何通过从闭源工作簿中指向表数组在 VBA 中使用 vlookup 函数?
- python - 如何将列表中的 3 个字母添加到 3 个输入字母
- date - 使用 JNA 从 dll 中获取 Date 对象
- python - 数据可视化 - Jupyter
- shopify - 将我的 shopify 应用程序转换为合作伙伴友好应用程序的最佳方式是什么
- java - 为什么一开始启动应用程序时我的回收站视图没有显示?
- android - Kotlin 1.3.61 Android Studio 中 Kotlin Coroutines 的问题