最後の質問から更新され、詳細が追加されました
Salesforce.comドメイン(https)でホストされるサーバー側スクリプトなしで、Salesforce.com APIから完全なJavaScriptアプリケーションを構築しています
このアプリは、 cloudfront signed cookies を使用して、salesforce.comからcloudfrontへの複数のファイルへのアクセスを許可できる必要があります。
これを行うために、APIゲートウェイからWebサービスとして公開されたawsラムダ関数を作成し、HTTP応答ヘッダーで署名付きCookieを生成してjsアプリに返すことを考えました。
次に、salesforce jsアプリがこの関数を呼び出して、署名付きCookieをフェッチし、ユーザーをcloudfrontのプライベートコンテンツURLにリダイレクトできるようにする必要があります。
これまでのところ、APIゲートウェイにリンクされたs3バケット+クラウドフロント配信+ラムダ関数を構築しました。しかし、Cookieと同じOriginポリシーのため、それらを連携させてブラウザーに署名付きCookieを設定することができません。
CORS
を使用してXHR request
を作成し、amazonws.comを使用して必要なCookieを取得します。XHR HTTP Response
を読み取って、サーバー側(amazonws.com)からクライアント側(salesforce.com)にCookieを正常にフェッチしましたヘッダー。
しかし(これは私が過去24時間を費やした場所です)、CookieはsalesforceのブラウザのCookieストアに設定されていません。 com。つまり、cloudfront.netへのリソースのリクエストには使用できません。
私のawsラムダ関数がcloudfront.netと同じドメインにあり、domain = cloudfront.netでCookieを提供する場合、それはうまくいくと思いますか?
またはこれを行う他の方法はありますか?
協力してくれてありがとうございます!
Cookieのdomain
属性を任意のドメインに設定することはできません。 foo.example.com
はCookieをexample.com
に設定できましたが、これは無関係なドメインであるため、Cookieをexample.org
に設定できませんでした。 From MDN:Set-Cookie:Invalid Domains :
オリジンサーバーを含まないドメインに属するCookieは、ユーザーエージェントによって拒否されます。
やりたいことを達成する方法については、そもそもやりたいことがはっきりしていません。 cloudfront.comのCookieは、cloudfront.comサーバーからのみ提供されます。たぶんあなたはクッキーで何かをしようとしているのは、決して設計されていないクッキーでした。
別のドメインからCloudFrontの保護されたリソースにアクセスしようとする場合は、ドメイン間でCookieを設定できないため、代わりに署名付きURLの使用に制限されます。ただし、CloudFrontサイトでJavaScriptを使用して、署名付きURLのパラメーターを使用し、CloudFrontで署名付きCookieを直接作成できます。それを行う単純なJSスクリプトを作成しました。
aws-signed-cookie-from-signed-url.js