7

Googleドライブを使用して、作成しているWebサイトの準CMSとして機能させ、コンテンツ所有者がGoogleドライブを使用してコンテンツを編集できるようにしたいと思います。Googleドライブにアクセスでき(この投稿の執筆時点では、サービスアカウントはGoogleドライブに直接アクセスできません)、コンテンツ所有者とドキュメントを共有できる特定のユーザーアカウントを使用したいと思います。

APIとチュートリアルを読んだ後、委任で答えを見つけました:https ://developers.google.com/drive/delegation

このプロセスに関する私の主な問題は、WebサイトがGoogle Appsによって管理されていないため、「ドメイン全体の権限をサービスアカウントに委任する」で概説されている手順で混乱することです。この委任は、Googleを使用せずに処理できるはずです。アプリですが、Googleドライブで特定のユーザーアカウントの設定を検索したところ、なりすましを承認する機能が見つからないようです。

私が使用しているコードのスニペット:

static public function getService() {
  $key = file_get_contents(GOOGLEAPI_KEYFILE);
  $auth = new Google_AssertionCredentials(GOOGLEAPI_SERVICE_EMAIL, array(GOOGLEAPI_SCOPE), $key);
  $auth->setPrn(GOOGLEAPI_IMPERSONATION);
  self::$apiClient = new Google_Client();
  self::$apiClient->setUseObjects(true);
  self::$apiClient->setAssertionCredentials($auth);
  return new Google_DriveService(self::$apiClient);
}

GOOGLEAPI_IMPERSONATIONは特定のユーザーアカウントであり、このコードを実行すると、例外は次のようになります。

OAuth2トークンの更新中にエラーが発生しました。メッセージ:'{"error": "access_denied"}

誰かが何か援助を提供しますか?委任に関してoAuthがどのように機能するかという基本的な概念を誤解していますか?

4

1 に答える 1

5

サービスアカウントは、次の2つの異なるケースを対象としています。

  • 独自のIDを使用してサービスを認証および呼び出すようにアプリ/プロセスを承認します。データがアプリによって所有されている予測、クラウドストレージなどのサービスについて考えてみてください。
  • ドメイン管理者がドメイン内のユーザーに代わって行動するようにアプリを事前承認できる、Googleアプリドメイン内のユーザーになりすます。

管理者はコントロールパネルを介してユーザーの帯域外でアプリを承認するメカニズムを持っているため、なりすましはGoogleAppsドメインで機能します。もちろん、管理しているアカウントのデータへのアクセスをアプリに許可することしかできません。組織に属していない個々のユーザーの場合、アプリは通常のOAuthフローを使用して各ユーザーに承認をリクエストする必要があります。

しばらくテストしていませんが、最後に、サービスアカウントを使用してドライブを使用できることを確認しました。私が遭遇した唯一の制限は、追加のクォータを購入することができず、アプリが最初の5GBの無料ストレージに制限されていたことでした。

于 2013-01-07T21:42:52.943 に答える