API аудита электронной почты - 403 запрещено

Я пытаюсь загрузить почтовый ящик пользователя с помощью API аудита электронной почты. Я получаю 403 Запрещенный ответ на этот код (ошибка возникает в последней строке, вызов метода UploadPublicKey):

    var certificate = new X509Certificate2(System.Web.HttpRuntime.AppDomainAppPath + "key.p12", "notasecret", X509KeyStorageFlags.Exportable);

    ServiceAccountCredential credential = new ServiceAccountCredential(
       new ServiceAccountCredential.Initializer(serviceAccountEmail)
       {
           Scopes = new[] { "https://apps-apis.google.com/a/feeds/compliance/audit/" }
       }.FromCertificate(certificate));

    credential.RequestAccessTokenAsync(System.Threading.CancellationToken.None).Wait();
    DebugLabel.Text = credential.Token.AccessToken;

    var requestFactory = new GDataRequestFactory("My App User Agent");
    requestFactory.CustomHeaders.Add(string.Format("Authorization: Bearer {0}", credential.Token.AccessToken));

    AuditService aserv = new AuditService(strOurDomain, "GoogleMailAudit");
    aserv.RequestFactory = requestFactory;
    aserv.UploadPublicKey(strPublicKey);

Я создал учетную запись службы в консоли разработчика и предоставил клиентскому идентификатору доступ к https://apps-apis.google.com/a/feeds/compliance/audit/ в консоли администратора.

Мне кажется, что учетная запись должна иметь все необходимые разрешения, но это не так. Есть идеи, что мне не хватает?

1 ответ

Решение

Итак, я отказался от попыток заставить его работать со служебной учетной записью, даже несмотря на то, что именно из документации Google вы бы убедились, что это правильный способ сделать это. После того, как я отправил письмо в службу поддержки Google, я узнал, что могу просто использовать OAuth2 для учетной записи суперпользователя, который создал приложение на консоли разработчика.

Затем я работал над получением токена доступа для автономного доступа (токена обновления), следуя описанному здесь процессу: однопользовательский сценарий API YouTube с OAuth (загрузка видео), а затем взял этот токен обновления и использовал его с этим кодом:

public static GOAuth2RequestFactory RefreshAuthenticate(){
OAuth2Parameters parameters = new OAuth2Parameters(){
    RefreshToken = "<YourRefreshToken>",
    AccessToken = "<AnyOfYourPreviousAccessTokens>",
    ClientId = "<YourClientID>",
    ClientSecret = "<YourClientSecret>",
    Scope = "https://apps-apis.google.com/a/feeds/compliance/audit/",
    AccessType = "offline",
    TokenType = "refresh"
};
OAuthUtil.RefreshAccessToken(parameters);
return new GOAuth2RequestFactory(null, "<YourApplicationName>", parameters);
}

это код отсюда /questions/36543648/google-oauth2-kogda-i-kak-ispolzovat-token-obnovleniya/36543668#36543668 (за исключением того, что я изменил вторую на последнюю строку... по какой-то причине общий код не работал, пока я не сделал это изменение).

Так что я наконец смог получить токен доступа, который позволил бы мне получить доступ к API аудита электронной почты. Оттуда все было легко, когда я перестал пытаться возиться с сервисной учетной записью.

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