CloudFront调试缺少Cookie值

时间:2016-10-18 02:21:54

标签: node.js amazon-web-services cookies amazon-cloudfront

我很难确定我的CloudFront设置需要做什么才能让我的签名cookie设置正常工作。我仔细地按照步骤使用NodeJS模块来处理cookie生成(https://github.com/jasonsims/aws-cloudfront-sign)。在我当前的设置中,我的应用程序正在为beta.my-site.com设置Cookie,但当我的应用程序上的链接访问cloudfront发行版后面的文件时files.my-site.com)中没有出现在请求和响应cookie中。这令人沮丧,因为我觉得我已经看过一切,只有一些线索,说明为什么我的设置可能无法正常工作。

1)突出的第一件事是没有为cookie设置域名,这可能是一个问题,因为只要域保持不变,cookie应该能够通过子域持久化

2)有没有办法从curl测试我的Cookie,以确保它与我设置的Cookie没有关系?遗憾的是,由于cloudfront的严格性以及cookie与云端分发配置具有相同主机名的需求,因此无法从localhost进行测试。

随机生成的文件名和密钥,而不是真实的。

Cloudfront分发配置:

Distribution Status: Deployed
Alternate Domain Names (CNAMEs): files.my-site.com, beta.my-site.com, *.my-site.com
SSL Certification: *.my-site.com (bjdsofjwpefsd4235)
Domain Name: uhr82459shfngbc.cloudfront.net
Custom SSL Client Support: SNI
Origin Domain Name: files-beta.s3.amazonaws.com
Restrict Bucket Access: Yes
Your Identities: access-identity-files-beta.s3.amazonaws.com
Viewer Protocol Policy: HTTPS Only
Allows HTTP Methods: GET, HEAD
Restrict Viewer Access: Yes
Trusted Signers: Self

路线53:

beta.my-site.com CNAME server-beta.elasticbeanstalk.com
file.my-site.com A ALIAS uhr82459shfngbc.cloudfront.net

我的应用程序中设置的Cookie(beta.my-site.com):

enter image description here

访问文件时设置Cookie(files.my-site.com): enter image description here

当前代码设置:

var express = require('express');
var router  = express.Router();
var passport = require('passport');
var crypto = require('crypto');
var moment = require('moment');
var path = require('path');
var fs = require('fs');
var cf = require('aws-cloudfront-sign');
var metaTags = require('./meta-routes');
var cfPK = fs.readFileSync(path.join(__dirname + /config/pk-UHANFBYH54248.pem));

var cfOptions = {
    keypairId: 'E5YGBKNfsdfds472',
    privateKeyString: cfPK
}

var signedCookies = cf.getSignedCookies('https://files.my-site.com/*', cfOptions);

function isLoggedIn(req, res, next) {
    if (req.isAuthenticated())

        for(var cookieId in signedCookies) {
            res.cookie(cookieId, signedCookies[cookieId]);
        }

        return next();
    res.redirect('/login');
}

行为设置: enter image description here

1 个答案:

答案 0 :(得分:0)

最大的问题与我的Cloudfront请求Cookie的域属性中的N/A值有关。为了将cookie从父域传递到子域,此属性需要具有主机名的值。