1

私が達成しようとしているのは、次のことを行う ajax を使用したインライン ログインです。

  1. セキュリティで保護されていない HTTP ページにログイン リンクが表示されます。「http://www.somedomain.com/somepage/」としましょう。ここではログイン情報は収集されません。

  2. ログイン リンクをクリックすると、「 https://www.somedomain.com/rest_api/values/」 を指す src を持つ iframe が作成されます。これは、HTTPS 経由でログイン フォームが最初に表示される場所です。

  3. 新しい iframe ポップアップ内で、HTTPS 経由でロードされた安全なログイン フォームがユーザーに表示されます。ユーザーはフォームに入力し、続けてクリックすると、自分自身にポストされます。

  4. ユーザーが正常にログインしたと仮定するwindow.parent.documentと、現在のユーザー ウィジェットで元のページを更新し、破棄する iframe を呼び出すスクリプトを介してアクセス可能なスクリプトに対して jquery 呼び出しが行われます。

これは、iframe に同じドメインとプロトコルを強制的に使用させるとうまく機能しますが、HTTP を使用して IFRAME に HTTPS でログイン スクリプトを強制的にロードさせるとすぐに、恐ろしい「プロパティ 'ドキュメント' へのアクセス許可が拒否されました」というメッセージが表示されます。ログインに成功した後、Firebug で "エラーが発生しました。

ヘッダーを設定する必要があることを理解しているAccess-Control-Allow-Originため、ページがリクエストされているドメインの HTTPS バージョンを使用するように動的に設定されます。元のページ リクエストの Firebug のヘッダー レスポンスでこれを確認しました。

それでもエラーが発生するのはなぜですか。応答ヘッダーには次のように表示されます。

Access-Control-Allow-Origin: https://www.somedomain.com

他に設定する必要があるものはありますか、それとも問題はおそらく別の場所にありますか?

助けてくれてありがとう!


編集:私は愚かではなく、ログインフォームが実際に安全にロードされていることを指摘するために上記を更新しました;)

4

1 に答える 1

0

上記の@SLaksによって提起された「すべき/すべきではない」問題は別として、これは有効ですが、どのサイトもそれ自体を検討する必要がある質問です...私が直面していた技術的な問題はこれでしたAccess-Control-Allow-Origin では十分ではありませんでした。次のように設定する必要があります。

Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: X-Requested-With

jquery は、POST または GET 呼び出し自体ではなく、POST が成功したに単純に実行されたため、最初のシナリオが必要かどうかはわかりませんが、参照用にあり、私たちのサイトの他の使用例。

ただし、最初は jquery からXMLHttpRequest 、具体的には.ajax()を使用して呼び出されたため...Allow-Headers、ヘッダーが含まれていたため、 2 つ目はキッカーでした。X-Requested-With: XMLHttpRequest

3つすべてが整っているので、それ以来問題はありません。これが同じ状況の他の人に役立つことを願っています!


編集:自分自身をだまされて、HTTPS から HTTP へはまだ機能しませんでした。残りの日から、これを理解しようとして過ごしましたが、そうすべきであるという事実にもかかわらず、そうではないことが明らかになりました。

したがって、最終的な解決策は、HTTPS 経由でログイン ページを読み込み、HTTPS 経由で送信し、ログインに成功したら、HTTP にリダイレクトして親にコールバックを送信し、ログイン iframe を削除することでした。

于 2013-04-15T18:17:57.853 に答える