电子邮件审核API - 403禁止

时间:2015-08-11 16:13:09

标签: c# google-admin-sdk

我正在尝试使用Email Audit API下载用户的邮箱。我收到403 Forbidden响应此代码(错误发生在最后一行,调用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/的客户端ID访问权限。

在我看来,帐户应该具有所需的所有权限,但它并不是。知道我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

好的,所以我放弃尝试使用服务帐户,即使这是Google的文档会让您相信这是正确的方法。在通过电子邮件发送Google支持后,我了解到我可以将OAuth2用于在开发人员控制台上创建应用程序的超级用户帐户。

然后,我按照此处列出的流程,致力于获取脱机访问的访问令牌(刷新令牌): Youtube API single-user scenario with OAuth (uploading videos) 然后获取该刷新令牌并将其与此代码一起使用:

html, body { 
                margin: 0; 
                padding: 0;
                width:  100%;
                height: 100%;
            }

            html {
                background-color: "#555761";
                background: "#555761";
            }

            body {
                font-family: "brandon-grotesque";
                font-wieght: 100;
                font-style: normal;
                color: #656771;
                bgcolor: "#555761";
            }

            p {
                font-family: "brandon-grotesque";
                font-wieght: 100;
                font-style: normal;
                color: #656771;
            }

            a {
                color: #555761;
            }

            a:link {
                color: #555761;
                text-decoration: none;
            }

            a:visited {
                color: #555761;
                text-decoration: none;
            }

            a:hover {
                color: #656771;
                text-decoration: none;
            }

            a:active {
                color: #555761;
                text-decoration: none;
            }

            /* Auto center content in window */
            #stage {
                width:100%; 
                margin: 0 auto;
                padding: 0;
                } 

            #stage canvas, #overlay {
                position: absolute;
                margin: 0 auto;
                padding: 0;
                }

            #overlay {
                margin: 0 auto;
                padding: 0;
            }

            #overlay p {
                color: #333;
                font-family: "museo-sans";
                font-weight: 900;
                font-style: normal;
                font-size: 14px;
            }

            .centered {
                position: fixed;
                top: 50%;
                left: 50%;
                transform: translate(-50%, -50%);
                -webkit-transform: translate(-50%, -50%);
                }

            .centered-bottom {
                position: fixed;
                bottom: 3%;
                left: 50%;
                transform: translate(-50%, -0%);
                -webkit-transform: translate(-50%, -50%);
            }

这是来自https://stackoverflow.com/a/23528629/5215904的代码(除非我将第二行更改为最后一行......无论出于何种原因,代码共享在我做出更改之前都无效。)

所以我终于能够获得一个允许我访问Email Audit API的访问令牌。一旦我停止尝试使用服务帐户,一切都变得轻而易举。