客户端无权使用此方法检索访问令牌 Gmail API C#
Client is unauthorized to retrieve access tokens using this method Gmail API C#
当我尝试使用服务帐户
授权 gmail api 时出现以下错误
"Client is unauthorized to retrieve access tokens using this method"
static async Task MainAsync()
{
sstageEntities db = new sstageEntities();
//UserCredential credential;
Dictionary<string, string> dictionary = new Dictionary<string, string>();
String serviceAccountEmail =
"xxx.iam.gserviceaccount.com";
var certificate = new X509Certificate2(
AppDomain.CurrentDomain.BaseDirectory +
"xxx-8c7a4169631a.p12",
"notasecret",
X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);
//string userEmail = "user@domainhere.com.au";
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
User = "xxx@xxx.com",
Scopes = new[] { "https://mail.google.com/" }
}.FromCertificate(certificate)
);
// Create Gmail API service.
var gmailService = new GmailService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
// Define parameters of request.
var emailListRequest = gmailService.Users.Messages.List("xxx@xxx.com");
emailListRequest.LabelIds = "INBOX";
emailListRequest.IncludeSpamTrash = true;
emailListRequest.Q = "from:bpm@xxx.co.in is:unread";
//Get our emails
var emailListResponse = await emailListRequest.ExecuteAsync();
我正在使用创建服务时获得的 p12 密钥 account.But 当我 运行 我的控制台应用程序出现以下错误时 occurs.Any 非常感谢帮助。
提前致谢!
服务帐号需要授权,否则无法访问该域的邮件。
"Client is unauthorized to retrieve access tokens using this method"
表示您没有正确授权检查Delegating domain-wide authority to the service account
在我的案例中,授权给了 https://admin.google.com/
中的旧客户端 ID
在为范围提供正确的客户端 ID 后,它开始工作。 (使用上述回答中 DalmTo 提到的指南 link。
我遇到了同样的问题,我花了一段时间才意识到我错过了什么。我已经在服务帐户设置中设置了域范围的权限。但是,根据下面的 link 和屏幕截图,我没有在域安全设置中添加 clientid 和 API 范围(例如 https://www.googleapis.com/auth/gmail.send, or https://mail.google.com/)。
https://developers.google.com/identity/protocols/oauth2/service-account#delegatingauthority
具体来说,这些步骤:
FWIW,由于我太新无法发表评论,DalmTo 和 Shane 的回答为我指明了正确的方向来解决我的问题,这是我添加到现有脚本中的新功能 (PHP)需要对服务帐户的其他范围进行授权。就我而言,我正在使用 GMail API.
除了 Shane 引用的 Google 文档页面中提到的路径,您还可以转到 https://admin.google.com/ac/owl/domainwidedelegation,在那里您可以在稍微不同的界面中管理全域委托(我实际上更喜欢它)。我通过安全 > API 权限进入该页面,然后单击关于这些设置移动到应用程序访问控制的通知,底部有一个“管理域范围委派”link。
当我尝试使用服务帐户
授权 gmail api 时出现以下错误"Client is unauthorized to retrieve access tokens using this method"
static async Task MainAsync()
{
sstageEntities db = new sstageEntities();
//UserCredential credential;
Dictionary<string, string> dictionary = new Dictionary<string, string>();
String serviceAccountEmail =
"xxx.iam.gserviceaccount.com";
var certificate = new X509Certificate2(
AppDomain.CurrentDomain.BaseDirectory +
"xxx-8c7a4169631a.p12",
"notasecret",
X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);
//string userEmail = "user@domainhere.com.au";
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
User = "xxx@xxx.com",
Scopes = new[] { "https://mail.google.com/" }
}.FromCertificate(certificate)
);
// Create Gmail API service.
var gmailService = new GmailService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
// Define parameters of request.
var emailListRequest = gmailService.Users.Messages.List("xxx@xxx.com");
emailListRequest.LabelIds = "INBOX";
emailListRequest.IncludeSpamTrash = true;
emailListRequest.Q = "from:bpm@xxx.co.in is:unread";
//Get our emails
var emailListResponse = await emailListRequest.ExecuteAsync();
我正在使用创建服务时获得的 p12 密钥 account.But 当我 运行 我的控制台应用程序出现以下错误时 occurs.Any 非常感谢帮助。
提前致谢!
服务帐号需要授权,否则无法访问该域的邮件。
"Client is unauthorized to retrieve access tokens using this method"
表示您没有正确授权检查Delegating domain-wide authority to the service account
在我的案例中,授权给了 https://admin.google.com/
中的旧客户端 ID在为范围提供正确的客户端 ID 后,它开始工作。 (使用上述回答中 DalmTo 提到的指南 link。
我遇到了同样的问题,我花了一段时间才意识到我错过了什么。我已经在服务帐户设置中设置了域范围的权限。但是,根据下面的 link 和屏幕截图,我没有在域安全设置中添加 clientid 和 API 范围(例如 https://www.googleapis.com/auth/gmail.send, or https://mail.google.com/)。
https://developers.google.com/identity/protocols/oauth2/service-account#delegatingauthority
具体来说,这些步骤:
FWIW,由于我太新无法发表评论,DalmTo 和 Shane 的回答为我指明了正确的方向来解决我的问题,这是我添加到现有脚本中的新功能 (PHP)需要对服务帐户的其他范围进行授权。就我而言,我正在使用 GMail API.
除了 Shane 引用的 Google 文档页面中提到的路径,您还可以转到 https://admin.google.com/ac/owl/domainwidedelegation,在那里您可以在稍微不同的界面中管理全域委托(我实际上更喜欢它)。我通过安全 > API 权限进入该页面,然后单击关于这些设置移动到应用程序访问控制的通知,底部有一个“管理域范围委派”link。