0

oAuth2 Google ドライブ アプリケーションを作成し、developer.gserviceaccount.com サービス アカウントで新しいファイルを作成しています。このサービス アカウントを所有するドメイン内の別のアカウントに所有権を変更したいと考えています。

新しく作成されたファイルのファイル ID と、所有権を譲渡したいユーザーの権限 ID を持っていますが、実行すると次のようになります。

File body;
File file;

body = new File();
body.setTitle(gdf.getTitle());
body.setDescription(gdf.getDescription());            
body.setMimeType(gdf.getMime_type());
body.setUserPermission(p);

// new file gets created ok
file = d.files().insert(body).execute();  

// create new permission for new user account
Permission p = new Permission();
p.setRole("owner");
p.setType("user");
p.setValue("newaccount@something.com");
p.setId(ACCESS_DOMAIN_PERMISSION_ID);  // <-- known value

d.permissions().update(file.getId(), ACCESS_DOMAIN_PERMISSION_ID, p).execute();

ステートメントは、ACCESS_DOMAIN_PERMISSION_ID が見つからないという不平を言って失敗します。

何かご意見は?

編集 -

上記を無視してください。ドメイン内のユーザーになりすまして、developer.gserviceaccount.com 以外のユーザーとしてファイルを作成できるようになりました。

資格証明の作成プロセス中:

GoogleCredential credential = new GoogleCredential.Builder()
    .setTransport(httpTransport)
    .setJsonFactory(jsonFactory)
    .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)                
    .setServiceAccountScopes(scopes)                
    .setServiceAccountPrivateKeyFromP12File(pk12)
    .setServiceAccountUser(ACCESS_DOMAIN_IMPERSONATE)    
    .build();

この問題は、サービス アカウントにドメイン全体の権限を付与することで解決できる委任の問題のようです。

ドメイン全体の委任

上記の成否については折り返しご連絡いたします。

4

1 に答える 1

0

ドメイン全体の権限をサービス アカウントに委任するとうまくいきました。次のスコープを追加しました。

https://www.googleapis.com/auth/drive
https://docs.google.com/feeds
https://spreadsheets.google.com/feeds

これらのスコープを必ず定義してください

List<String> 

コードで GoogleCredential を作成するとき。

于 2013-10-01T18:16:16.220 に答える