状況単一ページWeb Appsは、CORSとセキュリティ上の懸念
- 私は(角を使用して)単一ページ - Webアプリケーションを書いています。 SPAと呼ぶことができます
- もう1人のチームメイトが(Node.jsを使って)いくつかのAPIを書いています。ことができます呼び出しが
- 私のSPAは、ログイン/ passwdファイルを使用してサーバにログインし、
私のチームメイトは、セッションを追跡するためにクッキーを使用することを決定しましたいくつかのものをやっているサーバーです。このため、ログインに成功すると、HTTPのみのクッキーは、ウェブブラウザに設定するSPAがにロードされている。
問題
我々はサーバーののpublic_htmlディレクトリにSPAを入れた場合は、すべてうまくいく。ただし、SPAはAPIコードの一部として作成されます。これにより、SPAへのすべてのバージョンのアップグレードでAPIのアップグレードが必要になるため、ビルドプロセスが中断されます。
静的SPAファイルのみを処理する別個のWebサーバーでSPAをホストすると、CORSの問題が発生します。 SPAはアクセスしようとしているAPIとは異なるオリジンから来ているため、ブラウザはajax呼び出しをブロックします。これを克服するには、サーバー側にAccess-Control-Allow-Origin
を適切に設定する必要があります。私はまた、Access-Control-Allow-Credentials:true
を設定して、ブラウザにCookieの設定/送信を指示する必要があることを理解しています。
可能な解決策
私たちは、サーバーののpublic_htmlディレクトリにSPAがアップグレードされるたびにgitのプルを行い、ビルドプロセスを作成します。私はクライアントとサーバーのアップグレードを別々に保つためにこれを回避しようとしています。
プロキシという種類の状況が発生します。サーバーはSPAファイルを格納しませんが、SPAファイルをホストする別のサーバーからオンデマンドで収集します。この場合、WebブラウザはSPAファイルとその後の同じ原点からのajax呼び出しを表示します。
レスポンスに
Access-Control-Allow-Origin:*
を設定するようにサーバーをコーディングします。まず、これはあまりにも開いており、安全ではないように見えます。 本当に不安でしょうか、それとも私の認識ですか?また、Access-Control-Allow-Credentials:true
を設定しているため、ChromeはCannot use wildcard in Access-Control-Allow-Origin when credentials flag is true.
と申し立てます。これを克服するためには、Access-Control-Allow-Origin
に正確な起源(おそらく正規表現を使用)を入れなければなりません。これにより、SPAを未知のドメインのユーザーに配布することが厳しく制限される可能性があります。サーバーAPIデザイナーの場合は、Cookieベースの認証が推奨されます。 SPAの認証を処理する方法はありますか? OAuth2.0 and JWT based Authenticationは、クッキーベースの認証がSPAに適していないことを示唆しているようです。長所/短所
上記のオプションについてご意見をお寄せください。前もって感謝します。
ありがとうございます。したがって、おそらくあなたが好むソリューション2は、SPAとNode.js Appの両方が同じマシン上にあるという制限がありません。 SPAを持つマシンがNode.js App(またはクライアント/サーバの用語ではServer)を保持するマシンからアクセスできる限り、動作します。正しい? – Amarsh
エンドポイントがNode APIとSPAファイルの両方にアクセスできるマシン/サーバで終わる限り、本当にです。何かあれば、あなたのSPAファイルをNginx Serverに置くことをお勧めします。次に、ここからNginxに別のアプリケーションサーバー上のNode APIへのリクエストを指示させます。 – Dan
もう一度ありがとうございます。いくつかのコメントを待つことができます。アクセストークンを使用したヘッダー認証のために私が指摘できる文献はありますか? http://self-issued.info/docs/draft-ietf-oauth-v2-bearer.htmlと同じですか? – Amarsh