web-dev-qa-db-ja.com

CORSを使用してサードパーティのサーバーからブラウザにCookieを送信することは可能ですか

最後の質問から更新され、詳細が追加されました

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を設定することができません。

  • Cookieを生成する関数はamazonws.comでホストされています(ラムダ関数)
  • amazonws.com関数を呼び出す関数は、salesforce.comでホストされています
  • salesforce.comCORSを使用してXHR requestを作成し、amazonws.comを使用して必要なCookieを取得します。
  • 返されたCookieごとに、amazonws.com以下の属性を設定します。
    • ドメイン=cloudfront.net;パス= /;安全; httpOnly

XHR HTTP Responseを読み取って、サーバー側(amazonws.com)からクライアント側(salesforce.com)にCookieを正常にフェッチしましたヘッダー。

しかし(これは私が過去24時間を費やした場所です)、CookieはsalesforceのブラウザのCookieストアに設定されていません。 com。つまり、cloudfront.netへのリソースのリクエストには使用できません。

私のawsラムダ関数がcloudfront.netと同じドメインにあり、domain = cloudfront.netでCookieを提供する場合、それはうまくいくと思いますか?

  • awmazonws.com/ myfunctionはcloudfront.net/ myfunctionになります

またはこれを行う他の方法はありますか?

協力してくれてありがとうございます!

Attached is a simple diagram to illustrate my use case

1
Brice

Cookieのdomain属性を任意のドメインに設定することはできません。 foo.example.comはCookieをexample.comに設定できましたが、これは無関係なドメインであるため、Cookieをexample.orgに設定できませんでした。 From MDN:Set-Cookie:Invalid Domains

オリジンサーバーを含まないドメインに属するCookieは、ユーザーエージェントによって拒否されます。

やりたいことを達成する方法については、そもそもやりたいことがはっきりしていません。 cloudfront.comのCookieは、cloudfront.comサーバーからのみ提供されます。たぶんあなたはクッキーで何かをしようとしているのは、決して設計されていないクッキーでした。

1
Steffen Ullrich

別のドメインからCloudFrontの保護されたリソースにアクセスしようとする場合は、ドメイン間でCookieを設定できないため、代わりに署名付きURLの使用に制限されます。ただし、CloudFrontサイトでJavaScriptを使用して、署名付きURLのパラメーターを使用し、CloudFrontで署名付きCookieを直接作成できます。それを行う単純なJSスクリプトを作成しました。

aws-signed-cookie-from-signed-url.js

  • cloudFront URL www.cloudfronturl.com/sample/index.htmlを指すwww.mysite.comに署名付きURLを作成します
  • cloudFrontリソース「sample/index.html」にJSを含めました
  • ユーザーが署名付きURLを使用すると、index.htmlは、www.cloudfronturl.com/sample内のすべての追加のナビゲーションがCookieに基づいて機能するようにするSignedCookieを作成します
0
darbelaez