私はアプリ内課金のデモ作業を得たが、クラスのコメントが言うように、リモートサーバー上のSecurity.javaファイルを実装する方法を確認していないました:アプリ内課金、サーバーでのSecurity.javaの実装方法(?アプリエンジン)
/**
* Security-related methods. For a secure implementation, all of this code
* should be implemented on a server that communicates with the
* application on the device. For the sake of simplicity and clarity of this
* example, this code is included here and is executed on the device. If you
* must verify the purchases on the phone, you should obfuscate this code to
* make it harder for an attacker to replace the code with stubs that treat all
* purchases as verified.
*/
public class Security {
...
理想的には誰かがすでにアプリエンジン実装(java?)をまとめている可能性があります。これらの方法のどれがサーバー上に移動する必要があるのか、クライアント上にとどまる必要があるのかはわかりません。
たとえば、「verifyPurchase()」メソッドがサーバー側で動作する必要があることは明らかです。しかし、多くの請求依頼には "nonce"が必要であり、そのための簿記はクライアントコード(BillingService.java呼び出し)とSecurity.verifyPurchase()メソッド(おそらくサーバーコード)の両方に存在するように見えます。
おかげ
ありがとうございました。乱数を生成してデータストアに格納し、要求元のクライアントに返します。後でそのクライアントは検証要求を行います。私たちは、データストア内の提供されたnonceの存在をチェックします。存在する場合、それは合法です。検証チェックの終わりに、そのノンスをデータストアから削除する必要があります。しかし、この設定では誰かがランダムなノンスを試すことができます(恐らく実際には小さなチャンス) - ノンスをデータストア内のデバイスシグネチャに結びつける必要があるので、ノンスが要求側のデバイスシグネチャと一致するかどうかを調べることもできます? – user291701
ノンスの目的は、リプレイ攻撃を避けることです。つまり、誰かが有効な署名入りの応答をキャプチャした場合、何度も何度も送信し、有効であると認識されます。ナンスを使用すると、番号は一度しか使用されないため、ナンスを使用することはできません。ノンスは署名されたメッセージの一部であるため、実際にランダムなノンスを試すことはできません。彼らは秘密鍵を持っていないので、有効な署名を生成することはできず、取得したものを再送(再生)するだけです。それはどんなデバイスが意図されているかは実際問題ではありません。したがって、いいえ、デバイス情報をナンスと一緒に保存する必要はありません。 –
よかった、説明のおかげで! – user291701