2016-10-18 1 views
0

私は、署名付きの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ファイルがアクセスされたときに設定枚の

クッキー(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

+0

私はあなたに[先の質問](http://stackoverflow.com/q/40010849/1695906)にぶら下がっていると思います。あなたはおそらくそれらの1つを削除するべきです。あなたの設定についてもっと理解していなければ、正しい/理想的なソリューションを提案するのは難しいですが、潜在的に実行可能なのは、サーバーやアセットを*単一* CloudFrontディストリビューションの背後に置くことです:2つの起源(ファイルとアプリケーション) 2つ以上のキャッシュビヘイビア、適切なターゲットへのパスのルーティング、アプリケーションパスにアクセスする必要のないクッキーその後、それは "うまくいく"役に立った? –

+0

@ Michael-sqlbot私は質問の1つを削除して、もう一度答えるほど素晴らしいと感謝します。元のファイルがドメイン名ではなくs3バケットを参照しているので、これに従っているかどうかはわかりません。 2人を追加すると何ができますか?クラウドフロントのための私の起点設定のスクリーンショットを含むように質問を更新しました。 – cphill

+0

アプリケーションサーバー(server-beta.elasticbeanstalk.com)を追加の起点(カスタムオリジン)としてディストリビューションに追加してから、* CloudFront経由で特定のパス*をサーバーにルーティングすることができます。そのような要求は "ファイル"ドメイン上にあり、サーバは単に応答内で直接クッキーを設定することができます。そうすれば、files.example.com/app/*(例)は*経由します* CloudFrontをアプリサーバーに、files.example.com/*の他のすべてはCloudFrontからS3に移動します。 –

答えて

0

最大の問題が関係しています私のCloudfrontのドメイン属性のN/A値クッキーをリクエストする。 Cookieを親ドメインからサブドメインに渡すには、この属性にホスト名の値を設定する必要があります。

+1

私は同じ問題に直面しています。どのようにしてホスト名を追加しましたか? – smaira

関連する問題