0

私の Web アプリが、自分の資格情報をアプリに提供するユーザーに代わって動作しているとします。これにより、アプリはサード パーティ サービスへの API 呼び出しを行うことができます。ちなみに、これはこのサードパーティのサイト (eBay に少し似ていますが、規模は小さい) に製品のオファーを投稿するためのものです。

この投稿を簡単にする非常に便利な方法の 1 つは、サードパーティ サービスが認証済みユーザー向けの製品オファーを受け入れる必要がある洗練された Web フォームを再利用することです。Web フォームに入力し、クライアント ブラウザーをリダイレクトして、ユーザーが洗練された使い慣れた Web フォームを使用して編集できるようにするという考え方です。これは最高のユーザー エクスペリエンスであり、実装作業は最小限ですみます。

ただし、文書化された方法ではありません。さらに、リクエスト パラメータ (GET または POST) からフォーム フィールドに入力するような単純な方法では機能しません。Webフォームはそのようには機能しません。

代替案があるかもしれません。私のアプリは、ユーザーに代わってサードパーティのアプリとのセッションを開き、すべてのデータを送信してデータベースに保存し、ユーザーのブラウザーに、サーバー アプリが開いたセッションを引き継ぐために必要なすべてのデータを送信できます。代理。これはまだ試していないことに注意してください。また、サードパーティのアプリがセッションを IP 番号に関連付けると、失敗する可能性があると思います (これは、健全かどうかに関係なく、アプリが行う可能性があります)。

しかし、HTTP セッションを開くサーバー プログラムに、そのセッションを引き継ぐために必要なすべての情報を HTML/Javascript ドキュメントに書き込み、そのドキュメントをユーザーのブラウザに送信させることはできないでしょうか。 HttpFox を使用して観察してきた、サードパーティのフォームでブラウザを直接使用したときに構成されたように?

すべての情報、つまりすべてが HTTP です。サーバーのIP番号をクライアントに渡すことは明らかに不可能です...しかし、すべてのCookieとパラメーター. ブラウザで実行されている Javascript は、サーバー アプリが開いたセッションに直接入るサード パーティの Web サイトへの要求を作成するために、何らかの方法でドキュメント (おそらくスクリプト部分) に渡す情報を使用する必要があります。 . これは、私のドメインから発信されたドキュメントが Cookie を設定 (リクエスト ヘッダーを追加) し、ユーザーのブラウザにそのリクエストを実行させることを意味します。

つまり、サーバーからクライアントにセッションを渡すことは技術的に可能ですか?

Javascriptでどのようにしますか?

アップデート

別の質問への回答によると、別のドメインに Cookie を設定することはできません。これを許可すると、重大なセキュリティ上の欠陥が発生します。私がフロントエンド開発者ではないことを示します。

まだ、あきらめていません。そこにXmlHttpRequestオブジェクトがあります。たぶん、これは私の邪悪な目的のために悪用される可能性がありますか?

2 回目の更新

ということで実験してみましXmlHttpRequestた。悪いニュース (私とこの特定のケースにとって): どちらを使用しても機能しないようです (現在の Firefox を使用して) 私の巧妙に偽造されたリクエストが、クロスオリジン リソースXmlHttpRequestの W3C 標準になる予定のものに従って書き直されているためです。共有しているため、Cookieヘッダーは単純に削除され、ダミーのヘッダーはMoinGurke縮小されAccess-Control-Request-Headers: gurke,moinます。率直に言って、これはゲームを大きく台無しにしています。がっかりだよ。

4

1 に答える 1

0

よし、あきらめる。私がやりたいことは不可能です。この理由は、ブラウザーをより安全な場所にするための、いわゆる同一生成元ポリシーです。いくつかの指針については、この他の回答を参照してください。また、同じオリジン ポリシーからの例外を許可するためにあるクロス オリジン リソース シェアリングに関する W3C ワーキング ドラフトの私の評価は間違っていたようです。したがって、これが広く実装されている場合、実行可能になる可能性があります。しかし、全体として、この試みにはあまりにも多くの仮定と不確実性があります。

へへ。動作しました。:)

Cookie とそこに含まれるセッション ID は結局必要ありませんでした。そのリクエストに必要なすべてのパラメーターを取得する方法を見つけたので、自動送信フォームをクライアントに送信して、それらをクライアントに提供しています。

<body onload="document.forms[0].submit()">
<form action="..." method="post">
...

その後、クライアントは自分のセッションに入ります。よく働く。インターフェイスを変更しない限り。私はそれらのフォームを監視するテストをセットアップし、互換性のない方法で何かを変更するアクションを実行するよう警告しました。

于 2012-02-09T20:07:13.913 に答える