3

私は現在、実行しているWebサイトのAPIを開発しています。APIは多くの場所で使用され、そのうちの1つはAndroidアプリです。

これは、ユーザーがログインしてファイルをダウンロードできるようにすることを目的としています。私はAPIビルドを持っており、HTTPSを使用するので、転送時にすべてのデータに問題はありません。

私が抱えている問題は、API呼び出しにAPIキーが必要なことです。このキーを使用すると、問題を引き起こす可能性のあるAPIの特定の機能にアクセスできるようになります。

私が疑問に思っていたのは、このAPIキーを保護する方法はありますか?私はAndroid開発者ではありませんが、Android上にあるAPIを使用するため、解決策を検討する必要があります。

以下は、APIが使用するフローの例です。

// Log the user in with their username and password (HTTPS, so not really an issue)
romhut.request('/api/users/login?apikey=KEY', {username : 'scott', password : 'password'}, function(r) { 

    console.log(r);

    // Once you have the token, request the API key that allows actions such as downloading
    romhut.request('/api/files/download?apikey=KEY', {token : r.token, file : file}, function(d){

        console.log(d);
        // Download the file

    }, 'POST');

}, 'POST');
4

3 に答える 3

2

ユーザーごとに特定のAPIキーを作成する必要があります。実際にユーザーの手元にあるデータを保護するための本当に良い方法はありません(これについてコピー防止のメーカーに尋ねてください)次に、HMACを使用してAPIキーと要求されたAPIをハッシュし、同じことが両端で発生することを確認できます。参照: http: //en.wikipedia.org/wiki/Hash-based_message_authentication_code (PHPにはこのための関数があります)。

実際、ユーザーに対して異なるキーや取り消されたキーがある可能性があるため、キーとユーザーの間には多対1の関係があるはずだと言った方が正確です。

優れた概要については、https ://security.stackexchange.com/questions/18572/is-it-okay-for-api-secret-to-be-stored-in-plain-text-or-decrypt-ableを参照してください。

于 2013-01-18T21:35:34.997 に答える
2

いいえ。AndroidアプリケーションにAPIキーを埋め込んだ後は、APIキーを保護することはできません。アプリはAPIキーにアクセスする必要があるため、アプリにアクセスできるユーザーは、アプリ内からそのキーを復元して、自分の目的に使用できます。最善の方法は、アプリを難読化してリバースエンジニアリングを困難にすることです(攻撃者が時間の価値よりもアプリをリバースエンジニアリングしにくくすることが目標です)。公開されたAPIキーのリスクに基づいて、この点でどれだけの労力が必要かを決定する必要がありますが、回復を不可能にすることはできず、さらに困難になります。実際には、最善の策は、ビルドプロセス中にProguardをオンにする可能性が最も高く(したがって、APKでは、作業が行われずにかなり難読化されます)、最善を期待します。

于 2013-01-20T00:26:44.770 に答える
0

Androidキーストアは注目すべき方向ですか?次に、インストール時にアプリによってAndroidキーストアに保存されているキーに基づいて、暗号化された文字列がAPIに送信される可能性があります。そうすれば、復号化が成功した場合に、要求を処理できます。

于 2020-10-12T12:06:31.980 に答える