电子邮件审核 API - 403 禁止访问
Email Audit API - 403 Forbidden
我正在尝试使用电子邮件审核下载用户邮箱 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);
我已经在 Developers Console 中创建了服务帐户,并在 Admin console 中授予客户端 ID 对 https://apps-apis.google.com/a/feeds/compliance/audit/ 的访问权限。
在我看来,该帐户应该拥有它需要的所有权限,但实际上没有。知道我错过了什么吗?
好的,所以我放弃了让它与服务帐户一起使用的尝试,尽管 Google 的文档会让您相信这是正确的方法。在向 Google 支持人员发送电子邮件后,我了解到我可以将 OAuth2 用于在开发人员控制台上创建应用程序的超级用户帐户。
然后我按照此处概述的过程努力获取用于离线访问的访问令牌(刷新令牌):
Youtube API single-user scenario with OAuth (uploading videos)
然后获取该刷新令牌并将其与此代码一起使用:
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);
}
这是来自这里的代码 (除了我更改了倒数第二行......无论出于何种原因,在我进行更改之前共享的代码都不起作用)。
所以我终于能够获得一个访问令牌,允许我访问电子邮件审计 API。一旦我停止尝试使用服务帐户,一切都会变得轻而易举。
我正在尝试使用电子邮件审核下载用户邮箱 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);
我已经在 Developers Console 中创建了服务帐户,并在 Admin console 中授予客户端 ID 对 https://apps-apis.google.com/a/feeds/compliance/audit/ 的访问权限。
在我看来,该帐户应该拥有它需要的所有权限,但实际上没有。知道我错过了什么吗?
好的,所以我放弃了让它与服务帐户一起使用的尝试,尽管 Google 的文档会让您相信这是正确的方法。在向 Google 支持人员发送电子邮件后,我了解到我可以将 OAuth2 用于在开发人员控制台上创建应用程序的超级用户帐户。
然后我按照此处概述的过程努力获取用于离线访问的访问令牌(刷新令牌): Youtube API single-user scenario with OAuth (uploading videos) 然后获取该刷新令牌并将其与此代码一起使用:
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);
}
这是来自这里的代码 (除了我更改了倒数第二行......无论出于何种原因,在我进行更改之前共享的代码都不起作用)。
所以我终于能够获得一个访问令牌,允许我访问电子邮件审计 API。一旦我停止尝试使用服务帐户,一切都会变得轻而易举。