ブラウザクライアントでjavascriptアプリケーションが実行できることは、他のユーザーが見ることができ、アプリの外にあるバックエンドのREST APIサーバーにアクセスすることができます。
実際には、クライアントアプリケーションがJavaScriptで実装されているということは重要ではありません。コントロール外のマシンで実行されるアプリケーションは完全に信頼できません。 javascriptアプリケーションでViewSourceよりもネイティブコードをエンジニアリングするのは少し難しいですが、不可能ではありません。あいまいさによってセキュリティに頼ることは決してありません。
ブラウザアプリにログインして信頼できるアイデンティティプロバイダから認証トークンを取得させ、ブラウザアプリケーションがREST APIに対して行うすべてのリクエストに認証トークンを提示するようにすることをお勧めします。 REST APIは、認証トークンを検証して、それが信頼できるプロバイダからのものであるかどうか、およびトークン内の名前のユーザーがREST APIの使用を許可されているかどうかを確認できます。
これは、アプリケーションではなくユーザーにREST API呼び出しの承認を行い、世界中のブラウザアプリケーションに存在しない秘密(ユーザー資格情報)を使用します。
これを使用すると、どのユーザーが通話しているかに基づいてREST APIへのアクセスを制限できます。どのアプリケーションが要求を行っているかに基づいてアクセスをフィルタリングすることもできますが、アプリケーションの説明をユーザーの資格情報よりもコピーする方が簡単であるため、プライマリセキュリティ要素ではなく、これがマイナーポイントになります。
もう1つの選択肢は、WebアプリケーションをREST APIサービスのプロキシとして機能させ、ブラウザアプリケーションがREST APIからデータを取得するためにWebサーバーを経由する必要があることです。これは、ブラウザ・アプリケーションが、Webサーバーが、真正のアプリケーションからのものであり他の誰かからのものではないことを確認するために確認できるセッション状態を維持している場合に有効です。これにより、REST APIをパブリックネットワークから保護することができますが、認証の問題は実際には変更されません。アプリケーションの要求を識別するためにセッションコンテキストを増やすWebサーバーに移動したばかりですinterloper要求。あなたが本当にあなたのアプリケーションセッション状態に自信を持っていない限り、最高ではありません。
どのようなソリューションを選択しても、クライアント側のアプリケーション(ブラウザなど)からREST APIにアクセスできる場合は、公開されているREST APIであり、そのまま扱う(要塞化する)必要があります。クライアントマシンからアクセスできるプライベートWeb APIはありません。
なぜ2つの異なるサーバーにいる必要がありますか?異なる言語を使用していますか? – mpm
いいえ、両方のサーバーで同じ言語が使用されています。私はスケーラビリティの理由と懸念の分離のために、残りのapiを1つのサーバーに配置し、フロントエンドを他のサーバーに配置しました。 – Michael