Я успешно получаю доступ к учетным записям пользователей Gmail через нашу учетную запись службы, используя приведенный ниже код (за исключением использования областей gmail и объекта службы gmail).Тем не менее, использование того же подхода не удается для доступа к хранилищу.
/* Example of service-account-credentials.json file:
{
"type": "service_account",
"project_id": "[REDACTED]",
"private_key_id": "[REDACTED]",
"private_key": "[REDACTED]",
"client_email": "[REDACTED].gserviceaccount.com",
"client_id": "[REDACTED]",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/[REDACTED]"
}
*/
// parsed to my ServiceAccountKey class as follows:
//check "type" == "service_account"
//ServiceAccount.Project = "project_id"
//ServiceAccount.Id = "private_key_id"
//ServiceAccount.Private = "private_key"
//ServiceAccount.Client = "client_id"
//ServiceAccount.Email = "client_email"
//ServiceAccountKey.Auth == "auth_uri"
//ServiceAccountKey.Token == "token_uri"
//ServiceAccountKey.Provider == "auth_provider_x509_cert_url"
//ServiceAccountKey.Credential == "client_x509_cert_url"
ServiceAccountKey sak = new ServiceAccountKey(@"C:\Temp\service-account-credentials.json");
ServiceAccountCredential.Initializer saci = new ServiceAccountCredential.Initializer(sak.Email, sak.Token.AbsoluteUri);
saci.User = "[REDACTED]"; // should I be specifying the user who has Vault access?
saci.Scopes = new[] { VaultService.Scope.EdiscoveryReadonly };
ServiceAccountCredential sac = new ServiceAccountCredential(saci.FromPrivateKey(sak.Private));
BaseClientService.Initializer bcsi = new BaseClientService.Initializer();
bcsi.HttpClientInitializer = sac;
bcsi.ApplicationName = sak.Project;
VaultService vs = new VaultService(bcsi);
MattersResource.ListRequest lr = vs.Matters.List();
lr.PageSize = 10;
ListMattersResponse lmr = lr.Execute();
При использовании фактического пользователя, например, с saci.User = "google-vault-admin@company.com", я получаю следующую ошибку:
Ошибка: «unauthorized_client», Описание: «Клиент не авторизован для получения маркеров доступа с использованием этого метода.», Uri: «»
Однако при использовании учетной записи службы без делегированного пользователя (или указав, что saci.User = sak.Email) я получаю сообщение об ошибке:
Пользователь не принадлежит ни одному клиенту Dasher
Если я использую подход OAuth2 для учетной записи администратора Google Vault(то есть тот, который я вхожу в Google Vault через браузер), я могу успешно получить доступ к Vault через мою программу.Тем не менее, я хотел бы использовать учетную запись службы для потока на стороне сервера.Есть мысли о том, где я ошибаюсь, или можно ли использовать учетные записи служб для доступа к Google Vault?В разделе разрешений (https://console.developers.google.com/apis/credentials?...) предполагается, что учетная запись службы действительна для доступа к API-хранилищу. Я правильно настроил области действия и учетные данные, она аналогична Gmail, которая была успешной.
Возможно,адрес электронной почты учетной записи службы требует лицензии Google Vault?
(Примечание: я пробовал аналогичный подход в Java и, что интересно, получаю 401).