私は、署名付きのCookie設定を動作させるために、CloudFrontのセットアップで何をする必要があるのか判断するのが困難でした。私は慎重にステップを踏襲し、NodeJSを持つモジュールを使ってクッキーの生成(https://github.com/jasonsims/aws-cloudfront-sign)を処理しました。私の現在の設定では、アプリケーションはbeta.my-site.com
に設定されていますが、アプリケーション上のリンクがクラウドフロントディストリビューションの背後のファイル(files.my-site.com
)にアクセスすると、要求と応答のクッキーには表示されません。これは、私がすべてを見ているような気がして、セットアップがうまくいかない理由についての手掛かりがあるだけなので、イライラしています。CloudFrontデバッグCookieの値が見つからない
1)まず目立つのは、Cookieに設定されているドメイン名がないことです。これは、ドメインが同じである限り、Cookieがサブドメインを介して持続できる必要があるためです。
2)私が設定しているクッキーに関係なく、curl
からクッキーをテストする方法はありますか?残念ながら、クラウドフロントの厳密さと、クッキーがクラウドフロントディストリビューション構成と同じホスト名を持つ必要性のために、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
クッキー(beta.my-site.com
):
012ファイルがアクセスされたときに設定枚の
現在のコードの設定:
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');
}
私はあなたに[先の質問](http://stackoverflow.com/q/40010849/1695906)にぶら下がっていると思います。あなたはおそらくそれらの1つを削除するべきです。あなたの設定についてもっと理解していなければ、正しい/理想的なソリューションを提案するのは難しいですが、潜在的に実行可能なのは、サーバーやアセットを*単一* CloudFrontディストリビューションの背後に置くことです:2つの起源(ファイルとアプリケーション) 2つ以上のキャッシュビヘイビア、適切なターゲットへのパスのルーティング、アプリケーションパスにアクセスする必要のないクッキーその後、それは "うまくいく"役に立った? –
@ Michael-sqlbot私は質問の1つを削除して、もう一度答えるほど素晴らしいと感謝します。元のファイルがドメイン名ではなくs3バケットを参照しているので、これに従っているかどうかはわかりません。 2人を追加すると何ができますか?クラウドフロントのための私の起点設定のスクリーンショットを含むように質問を更新しました。 – cphill
アプリケーションサーバー(server-beta.elasticbeanstalk.com)を追加の起点(カスタムオリジン)としてディストリビューションに追加してから、* CloudFront経由で特定のパス*をサーバーにルーティングすることができます。そのような要求は "ファイル"ドメイン上にあり、サーバは単に応答内で直接クッキーを設定することができます。そうすれば、files.example.com/app/*(例)は*経由します* CloudFrontをアプリサーバーに、files.example.com/*の他のすべてはCloudFrontからS3に移動します。 –