10

ページ上の iframe (javascript で作成されている) から送信されるリクエストを認証する必要があります。認証は基本的な http 認証で行われます。やってみました

http://user:password@server

しかし、どうやらセキュリティ例外のため、これは IE では利用できません。

http://support.microsoft.com/kb/834489

iframe がサーバーで自動的に認証されるように、認証をリクエストに追加する別の方法はありますか? ありがとう。

私が現在使用しているコードは次のとおりです。

var url = 'http://userName:test@localhost:12000/Service.svc/GetStatus';

try {
    // Attach image to cache auth
    var frame = $('<iframe />');

    frame.load(function() {
        alert('here');
    });

    $('body').append(frame);

    frame.attr('src', url);
    //img.remove();
}
catch (e) {

}
4

1 に答える 1

6

私はこの正確な問題を解決しなければなりませんでした。私が思いついた唯一の解決策は、リバース プロキシを使用することです。これは次のように機能します。

Browser (request without basic authentication) -> Reverse Proxy (request with added basic authentication) -> Destination server (requires basic authentication)

そのため、宛先サーバーとは別の場所でリバース プロキシが実行されています。基本認証の詳細はリバース プロキシに格納されます。

の URL がiframe次のようになっているとします (リバース プロキシがポートで実行されていると仮定します8088)。

<iframe src="http://proxy_id.proxy_host.com:8088/cgi-bin/some/path"></iframe>

リバース プロキシは、リクエストを次のように変換します。

http://destination_host.com:PORT/cgi-bin/some/path

ここdestination_hostPORT、基本認証の詳細 (要求ヘッダーとして宛先サーバーに送信されるため、URL に表示されなくなります) は、元の URL にあった に基づいて、リバース プロキシ構成から取得されproxy_idます。

リバース プロキシはhostヘッダーを ( から*.proxy_host.comdestination_host.com) 変更しますが、パスは変更しません。したがって、プロキシは、CSS または JavaScript ファイルをダウンロードするためのサブリクエストを含む、ブラウザからのすべてのリクエスト、または開始されたリクエストに対して透過的です。 JavaScript から。

このセットアップにproxy_id.proxy_host.comは、リバース プロキシdestination_host.comの IP に解決され、宛先サーバーの IP に解決されるように、適切な DNS エントリが必要です。要件によってはproxy_host、実際にはdestination_host(プロキシが宛先サーバーで実行されている場合など) と同じになる場合があります。


それが基本的な考え方でした。私のプロジェクトでは、プロキシ構成を動的に追加できるため、メイン ドメインのすべてのサブドメインが*.some_host.com同じリバース プロキシ IP に解決されるようにする必要がありました。デフォルトのWindowsファイルは(キャッチオール)としてサブドメインをサポートしていないため、アクリルDNSを使用しています。hosts*

プロジェクトの要件によっては、その目的に使用できる適切なリバース プロキシを見つけることができる場合があります。私のプロジェクトは Erlang で書かれており、使用できるプロキシが見つからなかったため、独自のプロキシを実装しました。github: yoonka/charreadaで確認してください。まだドキュメントはありませんが、コードはかなり単純です。これは、任意の言語で書かれた任意のプロジェクトで使用できる可能性がありますが、現在の制限は、Erlang 呼び出しを使用して構成が追加されていることです (私のプロジェクトでは、別の Erlang アプリケーションから提供されているように)。静的ファイルからの構成の読み取りと、より良いドキュメントは、それに対する需要がある場合にのみ追加できます:)

于 2013-04-17T22:12:12.353 に答える