に送信していません。そのため、サービスへのクロスドメイン要求で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で最大を示しています。
私は実際にはこれが実際にクッキーを保存するために働くことを知っています。しかし、おそらく私はどのようにしたいではありません。私は、Chromeのクッキーに入り、それが見られるように適切に更新されます
私が見ている問題の「ために送信」の値が「唯一の同じサイト接続」であることがあります。もともとChromeを「あらゆる種類の接続」として扱うためにそれを設定する方法はわかりません。私はこれが、別のAJAX呼び出しを送るとき、そのクッキーがリクエストに含まれていないという理由だと思います。
私はAJAX呼び出しにcrossDomain
および/またはwithCredentials
を追加することで解決されたこのような他の投稿を見てきました。これは私のためにそれを解決しませんでした。 APIへのその後の呼び出しです。
$.ajax({
url: 'https://api.service.com/getTheThing',
crossDomain: true,
xhrFields: {
withCredentials: true
},
success: function(data){...}
});
クッキーはこの要求には含まれていないため、失敗します。
私はこれに驚いた。 'lax'への設定を削除するとchromeの動作が修正されましたVersion 64.0.3282.168 ' options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None; ' –