あなたが何をしたいのか、あなたのサーバが唯一のアプリからの着信接続を受け入れるだろうとあなたのアプリは、あなたのサーバーと通信するように、相互認証SSLを採用しています。
ここには、高度なアプローチがあります。自己署名入りのサーバーSSL証明書を作成し、Webサーバーに展開します。 Androidを使用している場合は、この目的でAndroid SDKに付属のkeytoolを使用できます。別のアプリプラットフォームを使用している場合、同様のツールも同様に存在します。次に、自己署名付きのクライアントを作成し、アプリケーション内にリソースとしてカスタムキーストアに配置します(keytoolはこれも生成します)。クライアント側のSSL認証を要求し、生成したクライアント証明書のみを受け入れるようにサーバーを構成します。そのクライアント側の証明書を使用して自分自身を識別し、その部分のサーバーにインストールしたサーバー側の証明書を1つだけ受け入れるようにクライアントを構成します。
アプリ以外の誰かがあなたのサーバーに接続しようとすると、サーバーはあなたのアプリに含まれているクライアント証明書を提示しない受信SSL接続を拒否するため、SSL接続は作成されません。
これは、ここで保証されているよりもはるかに長い答えです。私は段階的にこれを行うことをお勧めします。これは、Android上で自己署名入りのSSL証明書(他のモバイルプラットフォームでこれを行う方法に慣れていない)、つまりサーバー側とクライアント側の両方で対処する方法についてのWeb上のリソースです。私の本「Androidプラットフォームのアプリケーションセキュリティ」には完全なウォークスルーがあります(O'Reilly出版)。
回答があなたの質問を満たしているかどうかはわかりません。あなたが説明した問題にどのように接近したかを親切に伝えてください。未登録のユーザーに使用できるREST + AJAXベースのWebアプリケーションを構築しています。自分のように、私はボットからリソースを保護したい。 –
誰もがソースを見たり、サーバーに送信されているデータを監視できるWebページから呼び出されている場合は、論理的にAPIを本当にプライベートにすることはできません。ボットを捕まえるにはCaptchaのような通常のテクニックがありますが、最終的には自動DDOS型攻撃の可能性に対処するためにバックエンドサポート(WAF、高速自動スケーリングなど)が必要です。できるだけ早く(DB接続などを行う前に)可能性の高いDDoS攻撃を検出する限り、最初にページをダウンロードしようとしているボットを処理することは変わりません。 –