Доступ к Google Vault с использованием служебной учетной записи в C#.Net

Я успешно получаю доступ к учетным записям пользователей 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-интерфейсу Vault. Я правильно настроил области и учетные данные, это похоже на Gmail, который был успешным.

Возможно, адрес электронной почты учетной записи службы требует лицензии Google Vault?

(Примечание: я попробовал подобный подход в Java и получаю 401, что интересно).

0 ответов

Другие вопросы по тегам