web-dev-qa-db-ja.com

YouTubeや他のGoogleサービスが、URLにプレーンアカウント認証バインドキーを使用しているのはなぜですか?

以前、私はドライブやユーチューブのAPIのようなGoogleの利用可能なAPIツールで期限切れになりました。

それが機能する方法は、開発者アカウントを購入した後、APIを介して多くのGoogleサービスに許可されます。これを使用するには、アカウントにリンクされ、各リクエストURLに追加された一意のAPIキーが必要です。

例えば:

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=some.playlist.id&key={YOUR_API_KEY}

最初は、キー->アカウントバインディングを使用するのが賢明だと思いました。たとえば、APIキーがtosをバイパスしている場合、Googleは単にアカウントを禁止できます。

しかし、MitmproxyなどのMITMツールを使用して、Android/iOSアプリの認証キーをリバースエンジニアリングするのは非常に簡単であることがわかりました。そのアプローチを使用して、私はYoutube公式アプリのapiキーと、これらのサービスを使用する他の多くのアプリを見つけることができました。そのように?アプリはサービスを使用して匿名のままであり、さらに他のアカウントになりすます!です。

アカウントキーを受け取るSDKを構築し、それを使用してリクエストごとに1回限りのキーをローカルに生成する方が良いでしょうか。もちろん、これもリバースエンジニアリングすることができますが、はるかに難しくなります...

6
Nadav96

プレミアムプラン を使用している場合は、独自の秘密鍵に付属しているGoogle ClientIDを取得できます。

Google Maps APIプレミアムプランにサインアップすると、指定した連絡先メールアドレスにGoogleからウェルカムレターが届きます。ウェルカムレターには次の重要な情報が含まれているので、大切に保管してください。

  • プロジェクトID
  • クライアントID
  • クライアントIDの秘密暗号キー
  • Googleアカウント

認証と承認

APIへのリクエストを行うには、APIキーまたはクライアントIDを使用してアプリケーションを認証する必要があります。さらに、一部のAPIのリクエストにはデジタル署名も必要です。

しかし、あなたはプレミアムでなければなりません:)

1
John Wu

https://developers.google.com/youtube/registering_an_application から:

APIはAPIキーとOAuth 2.0の認証情報をサポートします。プロジェクトに適した認証情報を作成してください:

  1. OAuth 2.0:アプリケーションはOAuth 2.0トークンをプライベートユーザーデータにアクセスするリクエストとともに送信する必要があります。アプリケーションはトークンを取得するためのクライアントIDと、場合によってはクライアントシークレット。OAuth 2.0 Webアプリケーション、サービスアカウント、またはインストールされたアプリケーションの認証情報を生成できます。OAuth 2.0資格情報セクションをご覧ください。

  2. APIキー:OAuth 2.0トークンを提供しないリクエストは、APIキーを送信する必要があります。キーは、プロジェクトを作成し、APIアクセス、割り当て、レポートを提供します。APIキーの作成については、「APIキーの作成」セクションをご覧ください。

表示されているのはOAuth 2.0キーで、これは個々のユーザーのアカウントに関連付けられており、プライベートユーザーデータにアクセスするために使用できます。)またはAPIキープライベートユーザーデータにアクセスするために使用されますが、クォータ/レート制限とレポートのためにのみ使用されます。

さらに、4種類のAPIキーがあります。

  • サーバーキー:サーバーでこれを使用し、アプリケーションでこのキーを配布しない
  • ブラウザキー:Googleは、Referer/Originヘッダーに対してこのタイプのトークンの使用を検証します
  • iOSキーとAndroidキー:Googleは、アプリケーション識別子に対してこのタイプのトークンの使用を検証します

OAuth 2.0キーではMITMingを実行しても自分のデータにしかアクセスできないため、あまり役に立ちませんが、APIキーをMITMingするとユーザーのデータにアクセスできなくなるため、あまり役に立ちません。 APIキーのMITMingでできることは、キーの割り当てを最大にするか、アプリケーションの使用状況レポートをゆがめることによる、アプリケーションの中断を対象とすることだけです。これらはもちろん問題ですが、アプリケーションがYouTubeを呼び出す場合は回避できない問題ですクライアント側のAPI。

1
Lie Ryan

アプリにはウェブアプリと同じ問題があり、ウェブアプリでは「プロキシ」を使用してこの問題を解決します。 APIキーを持つサーバー(通常はphp)があり、クライアントがサーバースクリプトにアクセスすると、そのキーを使用してgoogleにリクエストを送信します。

APIの応答はログに記録され、編集され、要求元のクライアントに渡されます。クライアントにAPIキーが表示されることはなく、アプリの使用状況をカバーするログエントリが増えます。また、再入力せずに特定のユーザーを禁止したり、クライアントの観点から均一な応答を維持しながらバックエンドプロバイダーを切り替えたりすることもできます。

0
dandavis