所需技术:C#
描述 : 我正在努力在应用程序中创建工作流程,以便网站将要求使用用户同意屏幕进行 Google 身份验证,一旦获得域管理员的授权,网站将有权访问该域下的所有用户,还可以访问云端硬盘和团队云端硬盘数据。
尝试的身份验证方法:
- 创建了服务帐号用户,并从 admin.google.com 向该用户提供了 Google 范围的必要权限
- 创建了超级管理员用户,为其分配了在#1中创建的服务帐户参与者的角色。
与服务帐户凭据对象一起使用的代码
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer("Service_Account_Email")
{
Scopes = SCOPES,
User = ADMIN_EMAIL,
}.FromPrivateKey("PRIVATE_KEY"));
通过使用ServiceAccountCredential对象,我能够根据需要列出域用户以及驱动器详细信息。唯一的问题是,为此我需要客户端创建#1中提到的服务帐户和身份验证步骤,并要求提供凭据(服务帐户电子邮件,私钥,管理员电子邮件),这是我不想的。
我尝试使用管理员用户进行身份验证,该用户具有具有以下代码的用户同意屏幕的服务帐户参与者角色。
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
{
ClientSecrets = new ClientSecrets
{
ClientId = Constants.GoogleClientId,
ClientSecret = Constants.GoogleClientSecret
},
Scopes = Constants.GoogleScopes
//,DataStore = new FileDataStore("Drive.Api.Auth.Store")
});
UserCredential credential = new UserCredential(flow, email, response);
var service1 = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Drive API Service Account Sample",
});
使用上面的代码"服务1。Teamdrives.List()。Execute();" 总是结果 团队驱动器可用于我进行身份验证的管理员用户,尽管我在 UserCredential 对象中传递不同的电子邮件。
我在这里需要帮助,一旦管理员用户(服务帐户参与者)进行身份验证,我需要能够在没有任何用户干预的情况下操纵所有用户的驱动器数据
任何帮助将不胜感激。
谢谢
AFAIK,将全域权限委派给服务帐户时UserCredential
应是该域的成员。请注意文档中的警告,
服务帐户只应用于执行委派,其中有效标识是域中单个用户的标识。此外,服务帐户可能不会获取额外的存储配额,也不会充当域的成员。
您可能需要尝试以下步骤来授予访问权限(需要具有服务的帐户和应用管理员角色):
- 登录 Google 管理员,然后转到应用 ->G Suite -> 云端硬盘和文档 ->共享设置子菜单,然后从共享选项中选择开启 点击管理团队云端硬盘
- 子菜单,然后点击您要授予访问权限的团队云端硬盘
- 单击成员访问弹出窗口中的添加成员
- 输入服务帐户 ID(电子邮件),选择访问级别(我选择了完整),选中跳过发送通知,然后单击发送
有关其他见解,请参阅以下 SO 帖子和教程:
- 如何使用带有 Google 云端硬盘 .NET API v3 的服务帐号访问团队云端硬盘
- 使用服务帐号推动对文档的 API 访问权限
- 具有服务帐号的 Google 云端硬盘 API