3

ストーリー:ユーザーがサブスクリプションを購入できるAndroidアプリを作成しており、ユーザーがアカウントやログインを持っている必要はありません。ユーザーがサブスクリプションを購入したかどうかを確認したいのですが、Google Play AndroidDeveloperAPIがこのサービスを提供しているようです。

問題(TL; DR): OAuthを「Webアプリケーション」、「インストール済みアプリケーション」、「サービスアプリケーション」として使用する必要がありますか、それとも上記のいずれでも使用しないでください。

問題:これを始めるために、私は言われます:

Google Play Android Developer APIへのアクセスは、OAuth2.0Webサーバーフローを使用して認証されます。APIを使用する前に、APIコンソールプロジェクトを設定し、クライアントIDを作成して、更新トークンを生成する必要があります。-ソース

けっこうだ。次に、次のようなセットアップ手順があります。

2ページ目で、Webアプリケーションを選択し、リダイレクトURIとJavascriptオリジンを設定します。

私のアプリケーションはインターネットにアクセスしますが、インストールされているAndroidアプリであり、Webアプリケーションではないため、リンクする「リダイレクトURI」または「Javascriptオリジン」がありません。さらに、これにはユーザーがログインする必要がありますが、これは私が望まないので、私の場合は必要ありません(ユーザーがサブスクリプションを購入したかどうかを確認したいだけです)。

したがって、「Webアプリケーション」の代わりに「インストール済みアプリケーション(Android)」を作成しようとすると、ユーザーのリソースを管理できるようにするために、ユーザーのログインが必要になります。

これいらない。ユーザーログインを必要としない「サービスアカウント」と呼ばれる3番目の選択肢があります。

サービスアカウントは、外部ユーザーのリソース(標準のOAuthフローなど)ではなく、「独自の」リソース(ComputeEngineリソースを管理するAppEngineアプリなど)を処理するサービスがある場合に使用されます。 。サービスアカウントを使用すると、アプリがリソースの所有者になります...サービスアカウントを使用すると、サービスの購入に関するデータのみを取得できます。-ソース

それが私の場合に欲しいものかどうかはわかりません...

最後に、このオプションもあります。

最も単純なフローは、エンドユーザーの承認が不要なフローです。APIキーを使用してクライアントアプリケーションを識別する必要があります。-ソース

これは完璧なようです!ただし、最初にGoogle Play Android Developer APIを使用するには、OAuth 2.0で認証する必要があると言われました。これは、特に必要だと最初に言われたクライアントIDを使用しません。

4

1 に答える 1

2

ここで達成しようとしていることには、少なくとも2つの問題があります。

  1. Androidアプリケーションでサーバーの応答を処理するため、コードには次のようなものが含まれます。

    if (isSubscriptionValid())
    

    誰かが自分のデバイスでアプリケーションのAPKを改ざんし(非常に簡単です)、そのチェックを次のように置き換えることができます。

    if (true)
    

    攻撃者は、サブスクライブせずにコンテンツにアクセスできます。

  2. APIの呼び出しは開発者アカウントによって承認される必要があり、各ユーザーのデバイスに個人的にログインすることは明らかにオプションではないため、すでに正しく理解しているので、サービスアカウントを使用する必要があります。

    ただし、これらはサーバー間の相互作用のみを目的としています。そうしないと、すべてのデバイスに秘密鍵を保存する必要があり、Androidデバイスにデータを安全に保存できないため、この要件を満たしません。

    秘密鍵は安全に保管および管理する必要があります。

この種のチェックを行うには、バックエンドサーバーを用意することをお勧めします。したがって、コンテンツをクライアントに渡す前に、サブスクリプションが有効かどうかを判断できます。

APIは、サブスクリプションを安全に管理し、サブスクリプションを拡張して他のサービスと統合する方法として、バックエンドサーバーから使用するように設計されています。

利用可能なバックエンドサーバーがない場合は、アプリ内請求通知に依存する必要があります。

于 2012-09-12T07:22:34.907 に答える