開発者が、自分のホストと何らかの形で通信し、システム上の何らかの形式のユーザー アカウントを持たずに、これを安全に実行できるかどうかはわかりません。おっしゃる通り、長期間有効なトークンをアプリに含めた場合、どのような難読化を行っても、最終的にはリバース エンジニアリングによって発見される可能性があります。
私が見ることができる2つのオプションがあります:
1. 短命のトークン
このスキームでは、モバイル アプリケーションは開発者のシステムに接続して短い認証トークンを受け取ります。登録中およびその後定期的に、開発者は公開鍵と秘密鍵のペアを生成し、公開鍵を提供します。
各認証トークンには、暗号化されていない「開発者キー ID」と、トークンの発行データと疑似ランダム データのソルトを含む暗号化されたデータのビットが含まれている必要があります。開発者のホストは、公開鍵と秘密鍵のペアの秘密鍵を使用してデータを暗号化します。これにより、管理された安全な空間に秘密が保持されます。暗号化されたデータには、開発者のキーに対する既知の平文攻撃を防ぐためにソルトを含める必要があります。
アプリからトークンが送信されます。次の方法で正当性を判断できます。
- 暗号化されていない開発者キー ID を使用して、暗号化された文字列の復号化に使用するキーを決定します。
- 開発者キー ID が取り消されたか、期限切れになっていませんか? (キーの侵害、開発 API サブスクリプションの有効期限切れ、乱用などによる)。取り消された場合は、アクセスを拒否します。
- トークン内の暗号化されたデータは正しく復号化されますか? そうでない場合は、アクセスを拒否します。
- トークンの有効期限が切れていますか? (暗号化されたトークンの日付に基づく) その場合、クライアントに開発サーバーから新しいトークンを取得するように指示します。彼らのソフトウェアは、API に接続する前にこれを行う必要がありますが、念のため確認する必要があります。アプリ間でトークンをコピーすることは弱点であるため、トークンの有効期間を比較的短くすることをお勧めします。
- アクセスを許可する
公開鍵と秘密鍵の暗号化の代わりに対称暗号化を使用することもできますが、その場合、あなたと開発者の両方が秘密を知っています。開発者だけがそれを知っていると、より安全になります。
2. 開発ホストを介して API 呼び出しを渡す
モバイル アプリケーションは、API への呼び出しについて、ホストではなく開発者のホストと通信することができます。開発ホストが呼び出しの 1 つを受け取ると、単にその呼び出しを API に渡し、シークレット トークンを追加します。