I am trying to upload the files to google drive. For this I have an service account with domain wide authority enabled. "@xyx.com
" is my domain. I have a common "[email protected]
" google drive.
Google service account is "[email protected]
". I need to upload the files to "[email protected]
". I tried to impersonate the "[email protected]
" to the service account.
Below is my code
public static DriveService AuthenticateServiceAccount(string serviceAccountEmail, string keyFilePath)
{
// check the file exists
if (!File.Exists(keyFilePath))
{
return null;
}
//Google Drive scopes Documentation: https://developers.google.com/drive/web/scopes
string[] scopes = new string[] { DriveService.Scope.Drive, // view and manage your files and documents
DriveService.Scope.DriveAppdata, // view and manage its own configuration data
DriveService.Scope.DriveFile, // view and manage files created by this app
DriveService.Scope.DriveMetadata,
DriveService.Scope.DriveMetadataReadonly, // view metadata for files
DriveService.Scope.DrivePhotosReadonly,
DriveService.Scope.DriveReadonly, // view files and documents on your drive
DriveService.Scope.DriveScripts }; // modify your app scripts
var certificate = new X509Certificate2(keyFilePath, "notasecret", X509KeyStorageFlags.Exportable);
try
{
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
Scopes = scopes,
User = "[email protected]",
}.FromCertificate(certificate));
DriveService service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "CIM_GD_UPLOAD",
});
return service;
}
catch (Exception ex)
{
throw ex;
}
}
I am getting the following error.
Error:"unauthorized_client", Description:"Client is unauthorized to retrieve access tokens using this method.", Uri:""
I am using google api v3.
Please help me, is it possible to impersonate an user account to a service account? or guide me the correct way to upload/ retrieve the files from google drive.