新的Drive SDK
非常适合经过身份验证的用户。是否可以使用Drive SDK
使用Google 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模拟了另一个用户。它有类似的东西吗?
答案 0 :(得分:5)
您可以使用Service Accounts并指定用户在构建断言声明时进行模拟。
在API项目中创建服务帐户密钥后(来自APIs Console),您必须将此项目添加到cPanel中授权的第三方应用程序列表中。有关此内容的更多信息,请参见here。
您需要使用的“客户端ID”是绑定到服务帐户密钥的“客户端ID”,看起来像<APP_ID>-<OTHER_KEY>.apps.googleusercontent.com
由于您要管理其他用户文件,因此您必须授权Drive wide范围:https://www.googleapis.com/auth/drive
。
我们的大多数客户端库负责为开发人员提取索赔生成。如果您可以指定计划使用哪种语言,我可以通过提供代码片段来帮助您开始更新此答案。
答案 1 :(得分: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个范围仅适用于密钥的用户“所有者”...继续构建
答案 2 :(得分:0)
好的,这里是Dartlang中的完整代码,用于列出带有JSON密钥的模拟USER @ YOUR_DOMAIN用户文件
要运行它,您需要通过Google Developer Console生成JSON密钥(而不是P12) (在项目的上下文中:Apis&amp; auth - &gt;凭证)
dart项目在pubspec.yaml中的依赖关系: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
}
}