イントラネットの別のサーバーで Windows 認証を使用して Web サービスを呼び出す Windows 認証を使用する Web アプリがあります。具体的には、SSL を使用して jQuery クロスドメインで ajax 呼び出しを WCF REST サービス ( WebHttpBinding
) に対して行っています。
Web サービスで Access-Control-Allow-Origin ヘッダーを設定することで、クロス ドメインの問題を解決しました。そして、設定によるieのjquery呼び出しで$.support.cors = true;
。
ヘッダーを設定して資格情報を送信する問題を解決しました("Access-Control-Allow-Credentials", "true")
。設定によるWebサービスおよびjQuery呼び出し
$.ajaxSetup({ xhrFields: { withCredentials: true, crossDomain: true
}
});
これはIEとChromeの両方で機能し、別のサーバーで実行されているWindows認証を使用して、WebアプリからWindows認証を使用してWebサービスへのクロスドメインを作成しました。ただし、SSL を両側 (https から https) に追加すると、IE で呼び出しが機能しなくなりました。Chromeで引き続き動作しました。
Fiddler の http トラフィックを見ると、ブラウザはリクエストを送信していないように見えました。つまり、Fiddler には、リクエストが行われたことを示すエントリがまったくありませんでした。JavaScript をデバッグすることで、jquery 呼び出しから返されるエラーをトラップでき、ステータス テキストは「アクセスが拒否されました」でした。しかし、私が言ったように、ブラウザーが要求を Web サービスに送信しているとは思えませんでした。
jquery cors プラグインを試してみましたjQuery.XDomainRequest.js
。その時点で、私はフィドラーで http 呼び出しを見始めました。単一の 401「アクセスが拒否されました」でした。そしてそれだけでした。クライアント コールがクレデンシャルを送信しているようには見えませんでした。
その前に、SSL を追加する前は、認証資格情報の応答ヘッダーを含む 401 が表示されていました。要求ヘッダーに Windows 認証資格情報が含まれている 200 が続きます。それでうまくいきました。
しかし、今(IEで)私は単一の401しか得ていませんでした。
- クロスドメイン、
- Windows認証で、
- SSL と
- IEで。
4 つの要件すべてを組み合わせて、すべてを機能させることができます。Windows認証を使用してクロスドメインをIEで動作させることができる理由がわかりませんが、SSLを追加すると動作しません。
Chrome では問題なく動作するため、XDomainRequest オブジェクトに関するものである必要があります。これをすべて機能させるために jQuery 呼び出しを調整する方法はありますか。この特定の問題について聞いたことがある人はいますか? これは克服可能ですか?それとも単に頭を壁にぶつけているだけですか?