7

新しいDrive SDKものは、認証されたユーザーにとって非常に適しています。Drive SDKGoogle Apps の管理アクセスを使用して、他のドメイン ユーザーになりすますことはできますか?

doclist API で実行できますが、このツールでファイル (pdf、jpg) を管理およびコピーすることはできません。

私はこのコードでJavaを使用しています:

credential_origine = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
                    .setJsonFactory(JSON_FACTORY)
                    .setServiceAccountId("[email from console api]")
                    .setServiceAccountScopes(DriveScopes.DRIVE)
                    .setServiceAccountUser("user@domain.com")
                    .setServiceAccountPrivateKeyFromP12File(new File("key.p12")).build();

しかし、user@domain.com のデータを取得しようとするとエラーが発生します。コメント.setServiceAccountUser("user@domain.com")すると、キーの作成に使用したのと同じアカウントでコードがうまく機能します。

古い DOCList API では、リクエストの URL によって別のユーザーになりすました。似たようなものですか?

4

3 に答える 3

5

これは、サービス アカウントを使用して、アサーション クレームを作成するときに偽装するユーザーを指定することで実行できます。

API プロジェクトで( API コンソールから)サービス アカウント キーを作成したら、このプロジェクトを cPanel の承認済みサードパーティ アプリのリストに追加する必要があります。詳細については、こちらを参照してください。使用する必要がある「クライアント ID」は、サービス アカウント キーにバインドされたもので、次のようになります。<APP_ID>-<OTHER_KEY>.apps.googleusercontent.com

他のユーザーのファイルを管理したいので、ドライブ全体のスコープを承認する必要があります: https://www.googleapis.com/auth/drive

私たちのクライアント ライブラリのほとんどは、開発者のためにクレーム生成を抽象化します。使用する予定の言語を指定できる場合は、開始に役立つコード スニペットを提供することで、この回答を更新できます。

于 2012-07-24T20:52:27.557 に答える
0

アップグレード:

コード:

com.google.api.client.googleapis.auth.oauth2.GoogleCredential.Builder credential_origine_builder = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
                    .setJsonFactory(JSON_FACTORY)
                    .setServiceAccountId("[[]]")
                    .setServiceAccountScopes(DriveScopes.DRIVE)
                    .setServiceAccountPrivateKeyFromP12File(new File("cfg/file.p12"));

credential_origine_builder.setServiceAccountUser("user@domain.com");

正常に動作します。

に変更する.setServiceAccountScopes(DriveScopes.DRIVE)

.setServiceAccountScopes(DriveScopes.DRIVE,Oauth2Scopes.USERINFO_EMAIL,Oauth2Scopes.USERINFO_PROFILE)

ユーザーの名前とIDの取得には対応していないようです .setServiceAccountUser("user@domain.com");

3つのスコープを使用すると、キーのユーザー「所有者」でのみ正常に機能します...構築を続けます

于 2012-07-27T07:53:10.613 に答える
0

[ OK ] は、偽装された USER@YOUR_DOMAIN ユーザー ファイルを JSON キーで一覧表示するDartlangの完全なコードです。

それを実行するには、Google Developer Consoleを介して (P12 の代わりに) JSON キーを生成する必要があります ( プロジェクトのコンテキスト: Apis & auth -> credentials)。 JSON キーを生成する

pubspec.yaml での Dart プロジェクトの依存関係: googleapis googleapis_auth async)

import 'package:googleapis/drive/v2.dart';
import 'package:googleapis_auth/auth_io.dart';
import 'package:async/async.dart';

final _credentials = new ServiceAccountCredentials.fromJson(r'''
{
  "private_key_id": "*PRIVATE_KEY_ID*",
  "private_key": "*PRIVATE_KEY_CONTENT*",
  "client_email": "*SOMETHING@developer.gserviceaccount.com*",
  "client_id": "*SOMETHING.apps.googleusercontent.co*m",
  "type": "service_account"
}
''', impersonatedUser: "*USER@YOUR_DOMAIN*");  //here you type user

const _SCOPES = const [DriveApi.DriveScope];

main() async {
  var http_client = await clientViaServiceAccount(_credentials, _SCOPES);
  var drive = new DriveApi(http_client);
  var docs = await drive.files.list(maxResults: 10);

  for (var itm in docs.items) {
    print(itm.title); //list docs titles
  }
}
于 2015-07-04T15:49:33.760 に答える