ログアウトが必要なクロスオリジン要求を送信するために、自分のサーバーから別のサーバーにログインしようとしています。出来ますか?Ajaxでクロス・オリジン・ログインを行うことはできますか?
私は2つのWebサーバーAとBを持っています.www.a.comとwww.b.comを言います。 Bには、クライアントがログインしている場合にのみ使用できるAPIがあります。クライアントからそのAPIを使用する必要があります。
したがって、Aクライアント(ajax(post))のログイン要求をB. BレスポンスにCORSヘッダー、セッションクッキー、Bのホーム/インデックスへのリダイレクトに送信します。
しかし、クライアントからBサーバーに2番目のajaxリクエスト(jsonpリクエスト)を送信すると、このリクエストは以前のセッションCookieを送信しないため、ログインリクエストは失敗しました。
私は(2番目のブラウザタブで)手動www.b.comにログインしている場合、AからBへのすべての要求は、ログオンしているユーザーとして検出に成功しているので、BのAPIはA.
Iから作品私のログインリクエストから受け取ったセッションクッキーがブラウザに保存されていないと思う。使用
$.post("www.b.com/login", { 'j_username': 'username', 'j_password': 'password' });
:
jqXHR.withCredentials = true;
settings.crossDomain = true;
レスポンスヘッダ:
は、これは私のログイン要求である
Access-Control-Allow-Headers:x-requested-with
Access-Control-Allow-Methods:POST, GET, OPTIONS
Access-Control-Allow-Origin:*
...
Location:http://www.b.com/home
...
Set-Cookie:JSESSIONID=tY++VWlMSxTTUkjvyaRelZ0o; Path=/
www.a.comかへと保存されている受信クッキーwww.b.com?クライアントのajaxリクエストからこのクッキーをwww.b.comに設定するにはどうすればよいですか?私はそれが問題だと思う。
'b.com'が' Set-Cookie'ヘッダで応答すると、 'b.com'のクッキーが設定されます。これはあなたが望むものです。しかし、サーバーがワイルドカード 'Access-Control(アクセス制御)を与えた場合、認証されたCORS要求が失敗するため、ワイルドカードではない原点(' * 'ではなく 'http:// www.a.com')を指定する必要があると思います-Allow-Origin:* 'response](http://stackoverflow.com/q/19743396/710446)。 – apsillers