JavaScriptで、バックエンドRESTサービスと通信するパブリックシングルページアプリを作成しています。RESTサービスにアクセスできるのはシングルページアプリからのみであることです。
これは公開ウェブサイトであるため、ユーザーが認証の詳細を入力することはできません。 JSに保存されているシークレットは誰でも判読できるため、通常の認証メカニズムも機能しません。
RESTサービスは基本的に公開する必要があるため、セキュリティで保護することは不可能だと思いますが、誰かがスクリプトを作成してアプリケーションを複製するのを防ぐ方法を誰かが知っているかどうか疑問に思いましたREST api。
最初に頭に浮かぶのは、セッションを使用するか、ページで何かを設定して着信接続のIPをログに記録し、REST APIが最近メインにアクセスしたIPに応答することだけを許可することですこれはすべてのケースを防ぐわけではありませんが、REST APIを使用するには、少なくとも定期的にメインサイトにアクセスしている必要があります。
基本的に、ユーザーが認証を要求されない場合、画面リッパーがサイトからデータを効果的にプルするのを妨げるものは何もありません。 REST APIによってビジネスルールを適用する必要があるため、REST APIは実質的にWebサイトであり、それを使用するページは単に表示。
これがネイティブアプリの場合、以下を試すことができます。
HTTPSを使用しない場合でも、ヘッダーに何かを入れてアクセスキーを手動でハッシュすることができます(サーバーとアプリのロジックだけがその方法を知っています)。これにより、真ん中の人がアプリのふりをすることができなくなります。
これが純粋なWebアプリの場合
最初に、純粋なWebアプリをネイティブアプリ(別名ハイブリッドアプリ)内にラップして、アプリ内に秘密鍵をバンドルすることで、上記の保護を実現できるようにすることをお勧めします。内部に単一のWebビューを持つネイティブアプリを開発するのに、それほどコストはかかりません。
ただし、それが不可能な場合は、アプリを純粋なWebアプリのままにします-ここに潜在的なオプションがあります、
もちろん、これは完全なものではありませんが、ご存じのとおり、完全なセキュリティはありません。おそらく、目的を達成します(そして、うまくいけば法案に適合します)。ハイブリッドを利用する方が費用対効果は高いですが。
これは役立つかもしれません。あなたがあなたの残りのサービスを安全にすることができる多くのthignsがあります。 1つはCORSで、PUT/Deleteを使用します。これらのヘッダーはクロスドメインで設定できないためです。 http://www.nsa.gov/ia/_files/support/guidelines_implementation_rest.pdf