所需技术:C#
说明:我正在努力在应用程序中创建工作流程,以便网站将在用户同意屏幕上请求Google身份验证,一旦域管理员授权,网站就可以访问该域下的所有用户并访问驱动器和团队驱动数据。
尝试进行身份验证的方法:
与ServiceAccountCredential对象一起使用的代码
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer("Service_Account_Email")
{
Scopes = SCOPES,
User = ADMIN_EMAIL,
}.FromPrivateKey("PRIVATE_KEY"));
通过使用ServiceAccountCredential对象,我可以根据需要列出域用户以及驱动器详细信息。唯一的问题是,为此我需要客户端创建#1中提到的服务帐户和身份验证步骤,并且还要求提供凭据(服务帐户电子邮件,私钥,管理员电子邮件),这是我不想要的。
我尝试使用管理员用户(#2)进行身份验证,该用户具有服务帐户角色,并在用户同意屏幕上显示以下代码。
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",
});
使用上面的代码“service1.Teamdrives.List()。Execute();”始终结果团队驱动器可通过我验证的管理员用户使用,但我在UserCredential对象中传递了不同的电子邮件。
我需要帮助,我需要能够操作所有用户的驱动器数据,一旦管理员用户(服务帐户角色)进行身份验证,无需任何用户干预
非常感谢任何帮助。
由于
答案 0 :(得分:0)
使用的delegating domain-wide authority to a service account UserCredential
中的AFAIK应该是域的成员。请注意documentation,
服务帐户仅用于执行委派,其中有效身份是域中单个用户的身份。此外,服务帐户可能无法获得额外的存储配额,也不会充当域的成员。
您可能需要尝试以下步骤来授予访问权限(需要具有服务和应用程序管理员角色的帐户):
有关其他见解,请参阅这些SO帖子和教程: