2017-12-18 4 views
1

に送信していません。そのため、サービスへのクロスドメイン要求でCookieを送信する際に問題が発生しています。私はそれを私たちのCI環境では動作させましたが、ローカルでは動作させませんでした。基本的には、私はapi.service.comにAPIを持っていて、それはwebapp.service.comにあるクライアントから実行されるAJAX呼び出しによってアクセスされます。 APIはのクッキーをset-cookieで設定します。その後、APIへのすべての呼び出しにこのCookieを含める必要があります。これは、webapp.service.comから実行しているときに意図どおりに機能します。これはちょうど良いprodで動作します。 しかし、明らかな理由から、ローカルのwebappを開発し、ローカルファイルまたはlocalhostサービスからapi.service.comに対してAPI呼び出しを実行できるようにしたいと考えています。Ajaxは保存しますが、CORS Cookieを127.0.0.1からサービス

ローカルファイルのCookieを保存する場合はChromeが問題ではないことを理解していますが、問題は解決していません。クッキーは、実際には保存されています。後続のAPI呼び出しでそのCookieを送信しないだけです。ここで私は(いくつかのgenericized /検閲の製品名で)に行くんだなワークフローです:

AJAX呼び出しの記事は、私たちのAPIへ:

$.ajax({ 
    method: "POST", 
    crossDomain: true, 
    xhrFields: { 
    withCredentials: true, 
    }, 
    url: 'https://api.service.com/login', 
    data: data, 
    contentType:"text/plain", 
    dataType: "json", 
    success: function(data){ 
    ... 
    } 
}); 

CORSのものは、資格情報とこの起源を許可するように設定されています(許可起源の更新は、動的に、*を使用していないので、我々は戻ってこのクッキーを取得:。cookie:service-token=7f7d251ebeec37f7c0815....; SameSite=lax;Max-Age=2629744; domain=.service.com; path=/;

それはこのようにChromeで最大を示しています。

Request cookie

私は実際にはこれが実際にクッキーを保存するために働くことを知っています。しかし、おそらく私はどのようにしたいではありません。私は、Chromeのクッキーに入り、それが見られるように適切に更新されます

Chrome saved cookie

私が見ている問題の「ために送信」の値が「唯一の同じサイト接続」であることがあります。もともとChromeを「あらゆる種類の接続」として扱うためにそれを設定する方法はわかりません。私はこれが、別のAJAX呼び出しを送るとき、そのクッキーがリクエストに含まれていないという理由だと思います。

私はAJAX呼び出しにcrossDomainおよび/またはwithCredentialsを追加することで解決されたこのような他の投稿を見てきました。これは私のためにそれを解決しませんでした。 APIへのその後の呼び出しです。

$.ajax({ 
    url: 'https://api.service.com/getTheThing', 
    crossDomain: true, 
    xhrFields: { 
    withCredentials: true 
    }, 
    success: function(data){...} 
}); 

クッキーはこの要求には含まれていないため、失敗します。

答えて

1

これは、設定したSameSite=laxが、私が思ったのと反対のことをしていたことが判明しました。これを削除するとこの問題は解決しました。

+0

私はこれに驚いた。 'lax'への設定を削除するとchromeの動作が修正されましたVersion 64.0.3282.168 ' options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None; ' –

関連する問題