2017-09-26 13 views
0

私はあるドメインapp.example.comでホストされているクライアントと他のサブドメインのAPIサーバーapi.example.comを持っています。開発モードでは、localhost:3000localhost:4000があります。他のドメインにHTTPリクエストを送信するときにヘッダーのCookieが失われる

Cookieヘッダーを含むHTTP要求を送信しようとしています。これは、すべてが同じサーバーとドメイン上にあってもうまくいきました。次に、コードを変更し、プロパティーをAxios HTTPライブラリーに含めてCORSを追加しました。開発モードでは動作しますが、クッキーはリクエストで送信されますが、プロダクションではこれが壊れます。すべてのリクエストはうまく動作しているようです(OPTIONS)。POSTリクエストの後には200 ishの応答があります。

これは、APIサーバー上の私のCORSの設定です:

server.all('/*', (req, res, next) => { 
    res.header('Access-Control-Allow-Origin', DEV ? 'http://localhost:3000' : 'https://example.com') 
    res.header('Access-Control-Allow-Headers', '') 
    res.header('Access-Control-Allow-Methods', 'PUT,POST,GET,DELETE,OPTIONS') 
    res.header('Access-Control-Allow-Credentials', 'true') 
    next() 
    }) 

と、これは私のaxios要求がどのように見えるかです:

:私の要求は、Cookieヘッダが含まれていません。しかし

axios(`${API_URL}/someEndpoint`, { 
    method: 'post', 
    withCredentials: true, 
    data, 
    }) 

enter image description here

このpostと答えは、ドメイン間でクッキーを共有することは不可能だと言います。今私は非常に混乱しています。

どのユーザーがリクエストを送信したかを検出するために、ヘッダーにCookieを使用します。私がヘッダーでクッキーを失った場合、私はもはやどのユーザーから送られた(ログインしていない)リクエストを追跡することができなくなり、このデータを統計のために集めることができなくなります。

私のアプリケーションはモノリスでしたが、レンダリングサーバーからAPIサーバーを分離する必要がありました。サーバーが異なるドメインを使用していても、ヘッダー内のCookieを読み取ることは可能ですか?

答えて

0

セキュリティのリスクは、異なるドメイン間でこのようにクッキーを共有することは不可能ですが、質問ではサブドメイン間の共有についても言及されており、クッキーの設定中にdomainプロパティを追加することで可能です。値はまた、異なるドメイン間でクッキー値を送信するための回避策は、クッキー値とカスタムヘッダを送信することになる.

始まること

cookies.set('cookieName', 'cookieValue' , { path: '/', domain: DEV ? undefined : '.example.com' }) 

注意。

関連する問題