アプリケーションをリリースするとすぐに、リバースエンジニアリングされる場合があります。つまり、同じアプリケーション(同じバイナリ、同じ設定)がすべてのユーザーに配布されている場合、100%保護するためにできることはありません。
すべてのユーザーに対してアプリケーションをカスタマイズできる場合、他のアプリケーションがAPIを使用することを禁止しない可能性がありますが、少なくともAPIに対して実行できるリクエストの数によってこのアプリケーションを制限します。
次のスキーマを想像してください。
- クライアントは、一意の識別子(ユーザーごとに1つの識別子)を接続して送信します。
- サーバーは、公開鍵で暗号化されたチャレンジを送信して応答します。この公開鍵は、以前に送信された一意の識別子に関連付けられています。
- クライアントは、秘密鍵を使用してデータを復号化することで課題を解決し、復号化されたシークレットをそのままサーバーに送り返します。
- サーバーは、送信されたシークレットが最初に生成されたシークレットに対応することを確認します。
アプリケーションをハッキングし、秘密鍵を正常に取得する開発者は、自分のアプリケーションからAPIを使用できますが、サーバーの識別子としての識別子になります。
同じユーザーがAPIに1日あたり10,000回のリクエストを行うことができ、平均でアクティブなユーザーが1日あたり2000回のリクエストを行う場合、この開発者は自分のアプリケーションを自分で使用し、友人に渡すことができることを意味しますが、たとえば、朝に数分しか機能しないという理由だけで、彼は何千人にも販売することはできません。
これは役立ちますが、100%の証拠でもありません。ハッカーが自分のアプリがデバイスにインストールされているときに、アプリから秘密キーを抽出する方法を見つけた場合はどうなりますか?
あなたの質問には答えませんが、それでも役に立つかもしれないサイドノート:APIを主要製品(モバイルアプリケーション)のツールとして考えないでください。有料の製品であるファーストクラスの製品そのものと考えてください。同じモデルがAmazonとGoogleで長年使用されており、MicrosoftがAzureなどで積極的に使用し始めています。
APIを光沢のある新しいモバイルアプリの奴隷になった二次ツールとしてではなく、実際の製品は、ユーザーが実際に見るアプリケーションと同じレベルであると考えるとすぐに、APIを保護する方法についてあまり考えなくなります他のアプリによる使用、およびAPI自体の収益化に関する詳細。このようなAPIは、顧客であるアプリや、誰でも自由に開発できる他のアプリで使用できます。これにはいくつかの利点があります。
それだけで使用されるように、APIを作るあなたのアプリケーションは、困難かつ高価です。この時間とお金は、より有用なものに使用できます。
APIを公開することは、あなたと世界の両方に大きな利益をもたらすことができます。あなたが優れたアーキテクトであり、優れた開発者であると想像してください。驚くほど素晴らしいAPIを作成しましたが、ビジュアルデザイナーのスキルは下手であり、インタラクションデザインなどについてはまったく理解していません。人々が知っていることは、あなたが使えなくていモバイルアプリケーションを作成したということです。APIが公開されている場合、他の開発者はその品質に惹かれ、そのための優れたアプリケーションを作成し、多くのお金をもたらします。
他の人があなたのAPIをどのように使用するか想像することはできません。これがKinectで起こったことです。もともと、Microsoftはゲーム用にKinectを作成しました。MicrosoftがAPIを公開したとき、数年後に科学アプリケーションや医療分野などで使用されるとは想像もしていませんでした。WebAPIでも同様です。より多くの開発者がそれを使用し、より広範なアイデアが使用されます。