1

Android アプリケーションからアクセスする REST API を開発したいのですが、クライアント側アプリケーションのユーザーを承認する必要があります。これに対する簡単な解決策は、ユーザーにサービスへの登録を依頼し、そのユーザー名/パスワードを使用して REST API の呼び出しを成功させることです。ただし、登録の利便性とより優れたセキュリティを兼ね備えているように見える最先端のテクノロジに固執したいと思います。そこで、ユーザー認証と認可のために Google OpenID または OAuth 2.0 と統合することにしました。この 2 つの用語と対応する用語の違いは知っていますが、OAuth 2.0 を使用した認証には承認ステップが含まれていることもわかりました。

ここに投稿する前に多くの調査を行った結果、ここで紹介する非標準のソリューションにたどり着きました。私のケースの背景: Rest API は、モバイル アプリのユーザーが利用できるアプリケーション固有のデータを提供しますが、アプリのユーザーは一意に識別され、特定の呼び出し回数に制限される必要があります。

Android アプリのユーザーにリンクされた Google アカウントを使用することは、認証メカニズムと簡単に統合するための最良のオプションであると思われました。ただし、クライアントは Google API ではなく独自の REST API にアクセスしますが、REST API は Google API を呼び出す必要はありません。しかし、Android SDK の AccountManager を使用すると、リンクされた google アカウントの oauth access_token を使用して REST API に送信し、最後に TokenInfo 検証 API を使用してトークンの有効性を確認できることに気付きました。このようにして、Google アカウントの認証を再利用して、REST API へのアクセスを承認および認証することができました。

これが非標準に聞こえる場合、または OAuth 2.0 プロトコルのルール/目的に何らかの形で反していると思われる場合は、Google 認証を使用して REST API でユーザーを認証するための要件を満たすために、そのプロトコルを適切に使用するように指示してもらえますか?

4

2 に答える 2

2

私は同じ問題を見ています。これまでのところ、私はそれを行うための合理的な方法を見つけていません:(

あなたがそれを機能させるために管理したソリューション(AccountManagerを使用してトークンを取得し、そのトークンを安全にバックエンドに送信し、このトークンを使用してuserinfoサービスで検証し、電子メールが検証されていることを確認します)には1つの欠陥があります:それは匿名の割り当てに制限されています。バックエンドは、userinfo サービスを照会するときに client_id と client_secret を使用していないため、すぐに割り当てが不足する可能性があります。

アプリをAPI コンソールに登録して client_id と client_secret を取得することはできますが、アカウント マネージャーがトークンを取得するために使用するものと一致しません。

Google Play Services は、開発プロセスとユーザーの UI エクスペリエンスを簡素化しますが、検証のためにバックエンドに転送するには無効なトークンを発行します。この場合、トークンは開発鍵の署名を使用して取得されるため、アプリケーションに対してのみ有効です。これは client_id または client_secret と同等ですが、サーバーでこのパラメーターを複製する方法があるかどうかはわかりません (サーバーが Android のアプリの署名に使用される同じキーにアクセスできる場合)。

私は他に2つの可能な解決策を考えています:

  • アプリで Web サーバー フローを使用します。これには明らかな欠点が 1 つあります。アプリに Web サイトを埋め込む必要があり、ユーザー エクスペリエンスは理想とはほど遠いものです。しかし、それはうまくいくはずです。
  • Google App Engine アプリまたは Google Cloud Endpoint をバックエンドへのエントリとして使用し、必要に応じて実際のバックエンドに接続します。

他の考えやアイデアは大歓迎です。

于 2012-12-20T12:57:10.703 に答える
2

通常、OpenID は認証に使用され、OAuth は暗黙の認証と明示的な同意によるユーザーのリソースへの承認に使用されます。

OAuth は、アプリ (REST API) を承認して、Google 内のユーザーのプロファイルから特定の情報を取得します。ユーザー プロファイルの詳細な属性を取得しなくても、Google にアカウントが存在すること自体が、アプリ内で一意の ID を確立するために使用できる情報です。したがって、OAuth 2.0 プロトコルの「ルール」や「目的」に反することはありません。

Android アプリがデバイス上の Google アカウントにアクセスし、OAuth API を利用できる場合、それは機能するはずです。トークンを使用して Google のユーザー プロファイルからそれ以上の情報にアクセスしないことを選択した場合、それ以上の情報は使用されません。それはあなたの選択です。ただし、さらに情報を取得する場合は、スコープを設定してユーザーの同意を得る必要があります。

要約すると、あなたのアプローチは機能し、OAuth を限られた方法で使用することになります。

于 2012-12-12T14:04:46.623 に答える