客户未经授权使用此方法检索访问令牌Gmail API C#

时间:2017-03-14 11:22:33

标签: c# gmail-api

当我尝试使用服务帐户

授权gmail api时出现以下错误
  

"客户未经授权使用此方法检索访问令牌"

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键。但是当我运行我的控制台应用程序时,会出现以下错误。非常感谢任何帮助。

提前致谢!

4 个答案:

答案 0 :(得分:17)

服务帐户需要获得授权,或者无法访问域的电子邮件。

  

“客户未经授权使用此方法检索访问令牌”

表示您未经授权正确检查Delegating domain-wide authority to the service account

答案 1 :(得分:1)

我遇到了同样的问题,花了我一段时间才意识到我所缺少的东西。我已经在服务帐户设置中设置了域范围的权限。但是,根据下面的链接和屏幕截图,我没有在域安全性设置中添加clientid和API范围(例如https://www.googleapis.com/auth/gmail.sendhttps://mail.google.com/)。

https://developers.google.com/identity/protocols/oauth2/service-account#delegatingauthority

具体来说,这些步骤: steps I was missing

答案 2 :(得分:1)

FWIW,由于我太新以至于无法发表评论,因此DalmTo和Shane的答案为我指出了正确的方向,即我添加到现有脚本(PHP)中的新功能需要对以下范围进行授权服务帐户。就我而言,我使用GMail API。

除了Shane在Google文档页面中提到的路径外,您还可以转到https://admin.google.com/ac/owl/domainwidedelegation,在这里您可以在稍微不同的界面中管理域范围的委派(我实际上更喜欢)。我通过“安全性”>“ API权限”进入该页面,然后单击有关那些设置移至App Access Control的通知,底部有一个“管理域范围内的委托”链接。

答案 3 :(得分:0)

就我而言,授权是授予https://admin.google.com/中的旧客户ID

为范围提供正确的客户端ID后,它开始工作。 (使用上面的答案中DalmTo提到的指南链接。